当我尝试在结果之前运行它时,在结果之前会出现一些奇怪的数字,有人知道为什么吗?我真的不知道它也一直说我的帖子只是代码,使我陷入困境,所以整句话都没用,请停止阅读。
#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;
}
我在运行它时没有看到错误,也许尝试在scanf之前添加一个fflush(stdin)并初始化j = 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);