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

标签 c arrays sorting int

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

最佳答案

int x[]= {};不起作用,因为它不包含任何元素。但是用 {} 初始化它反正在 C 中不起作用,而是这样做:

int x[24] = {0}; // first element explicitely set to 0, the rest default-initialized to 0

您还需要输入 {0}对于 evenodd .如果它使用 {} 为您编译那么有可能您正在将它编译为 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 .

关于c - 将输入的整数排序为奇数和偶数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56338735/

相关文章:

比较内容 2D 指针 C

ios - 访问 CKRecordZone 数组中的字段?

python - 如何在 Numpy 中就地扩展数组?

javascript - 递归搜索全局变量及其属性中的值

Java排序方法编译错误

java - 排序后数组列表中元素的位置

mysql - 为 mysql 查询指定两种不同的排序顺序

c - GDB 说 "no symbol table,"但 nm 显示文件有调试符号

C简单输入问题

c - C函数的隐式int返回值