将输入的整数排序为奇数和偶数数组

时间:2019-05-28 09:13:22

标签: c

我是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)

1 个答案:

答案 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