如何读取直到EOF并打印输入的偶数/奇数?

时间:2017-05-04 10:56:46

标签: c

我有以下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");

}

2 个答案:

答案 0 :(得分:4)

您的问题有一个更简单的解决方案

希望你喜欢

#include<stdio.h>


int main()
{

   int num,od = 0, ev = 0;
   int odd[1000],even[1000];

   while(scanf("%d",&num) == 1)
   {
      if(num%2==0)
      {
          even[ev] = num;
          ev++;
      }
      else
      {
          odd[od] = num;
          od++;
      }
   }

   printf("Odds numbers are: ");

   for(int i = 0;i<od;i++)
   {
       printf("%d ",odd[i]);
   }

   printf("\nEven numbers are: ");

   for(int i = 0;i<ev;i++)
   {
        printf("%d ",even[i]);
   }


   return 0;
}

节目输出与预期输出相匹配

快乐编码

答案 1 :(得分:0)

嗯,你已经接受了一个完全不同的方法,但你的例子是不正确的,因为你在每个循环阶段做了scanf,然后在for体内做了另一个,所以你做了 scanf,这使第二个值杀死数组元素i中的第一个。这使您松开了一半的读取元素并解释了您获得的输出。只需将scanf放入循环体内即可使其正常工作。