【发布时间】:2017-10-02 12:27:12
【问题描述】:
我有下面的 C 代码,它读取用户输入直到文件结束 (ctrl+d) 并将它们存储在一个数组中。然后,它应该在一行中打印所有奇数,然后在另一行中打印偶数。由于某种原因,它没有按预期工作。
当我输入以下内容时:
1
2
4
16
32
64
128
256
512
1024
2048
4096
the output is:
Odd numbers were:
Even numbers were: 2 16 64 256 1024 4096
Expected output:
Odd numbers were: 1
Even numbers were: 2 4 16 32 64 128 256 512 1024 2048 4096
代码如下:
#include <stdio.h>
int main(void){
int array[1000];
int i,j,k;
int counter = 0;
for(i=0; scanf("%d", &array[i]) != EOF; i++){
scanf("%d", &array[i]);
counter = counter+1;
}
printf("Odd numbers were: ");
for(j=0; j<counter; j++){
if(array[j]%2 != 0){
printf("%d ", array[j]);
}
}
printf("\n");
printf("Even numbers were: ");
for(k=0; k<counter ; k++){
if(array[k]%2 == 0){
printf("%d ", array[k]);
}
}
printf("\n");
}
【问题讨论】:
-
你知道你可以完全摆脱
j和k吗? -
你注意到第一个 for 循环上下文中的双 scanf() 还是只有我?
-
for(i=0; i < 1000 && scanf("%d", &array[i]) == 1; i++) { counter = counter+1; } -
第一个是'for'循环中的文件结束条件,除非有更有效的方法,可能有。
-
@novice 在任何地方都使用
i,无论如何,您在每个循环开始时都将其重新分配为0。 :)
标签: c