我是C语言的初学者,正在尝试将用户输入的数字排序为奇数和偶数数组。我不明白为什么我的代码无法正常工作。 干杯。
这是我的代码,我不明白我的错误。
int x[]= {};
int i=0;
int d=0;
int j=0;
int even[12]={};
int odd[12]={};
printf("Enter amount of numbers: "); // asking user for amount of numbers
scanf("%d", &d);
for (j=0; j<d; j++){
printf("Enter number %d: ", i+1); // scanning input into 'x' array
scanf("%d", x[i]);
}
printf("Even numbers: ");
for (i=0; i<d; i++) {
if (x[i] % 2 == 0) { // sorting into even array
even[i]=x[i];
printf("%d \n", even[i]);
}
}
printf("\n Odd numbers: ");
for (i=0; i<d;i++){
if (x[i] % 2 != 0) { // sorting into odd array
odd[i]=x[i];
printf("%d \n", odd[i]);
}
}
此错误消息不断出现:
$ ./main
Enter amount of numbers: 4
Enter number 1: 6
Segmentation fault (core dumped)
答案 0 :(得分:1)
int x[]= {};
不起作用,因为它不包含任何元素。但是用{}
初始化它在C中还是行不通的,而是这样做:
int x[24] = {0}; // first element explicitely set to 0, the rest default-initialized to 0
您还需要为{0}
和even
输入odd
。如果它是用{}
为您编译的,则有可能您将其编译为C ++程序,或者您的编译器仍然可以容忍它(但它不能在每个C编译器上都可以使用)。
scanf
需要int
的地址,因此需要scanf("%d", x[i]);
来代替scanf("%d", &x[i]);
。但是i
是此for (j = 0; j < d; j++)
循环的错误迭代器。而是这样做:
for (j = 0; j < d; j++) {
printf("Enter number %d: ", j + 1); // scanning input into 'x' array
scanf("%d", &x[j]);
}
还要注意,您执行此操作的方式是将数组的一半留在0
处。因此,例如,如果我将值1
插入到6
,则odd
包含值1 0 3 0 5 0
。