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

Posted

技术标签:

【中文标题】如何阅读直到 EOF 并打印输入的偶数/奇数?【英文标题】:How to read until EOF and print the even/odd numbers entered? 【发布时间】: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");


【问题讨论】:

你知道你可以完全摆脱jk吗? 你注意到第一个 for 循环上下文中的双 scanf() 还是只有我? for(i=0; i &lt; 1000 &amp;&amp; scanf("%d", &amp;array[i]) == 1; i++) counter = counter+1; 第一个是'for'循环中的文件结束条件,除非有更有效的方法,可能有。 @novice 在任何地方都使用i,无论如何,您在每个循环开始时都将其重新分配为0。 :) 【参考方案1】:

好吧,您已经接受了一种完全不同的方法,但是您的示例不正确,因为您在每个循环阶段都做了一个 scanf,然后在 for 正文中又做了一个,所以您做了 两个 scanf's 在每个循环通过,这使得第二个值杀死数组元素 i 中的第一个值。这使您释放了一半的读取元素并解释了您得到的输出。只需将scanf 放到循环体内就可以让它正常工作,可能。

【讨论】:

【参考方案2】:

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

希望你喜欢

#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;

程序输出与预期输出匹配

快乐编码

【讨论】:

对治愈的解释会改善这个答案。 如果用户输入非数字输入,while(scanf("%d",&amp;num) != EOF) 是一个无限循环。 while(scanf("%d",&amp;num) == 1) 更好。最好与想要的 1 进行比较,而不是与不需要的返回值之一 EOF 进行比较。 但是,在这两种方法中,用户都需要使用 ctrl+Z 来结束输入 在这个答案的方法中,输入"1\n""2\n""X\n""4\n"ctrl+Z,由于'X'没有被消耗,代码将永远循环。用户有时会犯错误。代码应该做什么?让用户满足其需求或提供建设性反馈?

以上是关于如何阅读直到 EOF 并打印输入的偶数/奇数?的主要内容,如果未能解决你的问题,请参考以下文章

用JS文件如何设置奇数表格行背景和偶数表格行背景

java 编程:对用户输入的整数进行奇数偶数统计,直到用户选择“n”来停止

csharp 如果输入的整数是奇数或偶数,则打印。

csharp 如果输入的整数是奇数或偶数,则打印。

谁能告诉我excel表格中如何将数字按奇数和偶数依次排列

浏览器里怎么打印奇数页和偶数页?