寻找偶数的程序?

问题描述 投票:0回答:2

当我尝试在结果之前运行它时,在结果之前会出现一些奇怪的数字,有人知道为什么吗?我真的不知道它也一直说我的帖子只是代码,使我陷入困境,所以整句话都没用,请停止阅读。

#include <stdio.h>
int main(int argc, const char * argv[]){

int vett1[20];
int vett2 [20];
int i, j;
int vettTot[20*2];
int N;

printf("how many numbers");
scanf("%d", &N);

for(i=0; i<N;i++){
    printf("\ninsert n %d out of %d ", i+1, N);
    scanf("%d", &vett1[i]);

}
for(i=0; i<N;i++){
    printf("\ninsert n %d out of %d ", i+1, N);
    scanf("%d", &vett2[i]);

}

for(i=0;i<N;i++){
    if(vett1[i]%2==0){
        vettTot[j]=vett1[i];
        j++;
    }
    if(vett2[i]%2==0){
        vettTot[j]=vett2[i];
        j++;
        }


}
printf("\nthe result is:\n");

for(i=0;i<j;i++){
    printf("%d, ", vettTot[i]);

}

return 0;
}    
c
2个回答
0
投票

我在运行它时没有看到错误,也许尝试在scanf之前添加一个fflush(stdin)并初始化j = 0


0
投票

在C中,变量不会自动初始化-也就是说,在创建变量时,除非您也明确告诉它们,否则它们没有值。这意味着,如果您在为其分配值之前尝试使用它们,则它们将包含随机数据。

特别是int do not以0开头,除非您告诉他们这样做。

您的几个变量尚未初始化。 j是一个completley随机数,但是您试图使用它来访问数组。同样,数组充满随机数。

vettTot[j]=vett1[i];

此行设置vettTot的完全随机元素(可能甚至不在范围内,因为j不一定从0开始。

for(i=0;i<j;i++){
    printf("%d, ", vettTot[i]);
}

这些行正确访问了vettTot,其中完全包含随机数。

要解决此问题,您需要初始化变量。通常,总是将变量初始化为已知值被认为是一种好习惯。

(实际上,在使用i和N之前,它们都会被赋予一个值,但这仍然是一个很好的习惯)

int vett1[20];
int vett2 [20];
int vettTot[20*2];
//Init ints to zero
int i = 0; int j = 0; int N = 0;

//You could also fill the arrays with zeroes, if you wanted to
memset(vett1, 0, 20);
memset(vett2, 0, 20);
memset(vettTot, 0, 20*2);
© www.soinside.com 2019 - 2024. All rights reserved.