空白计数程序给出错误的输出

时间:2012-06-29 15:33:30

标签: c

下面是我编写的一个小程序,用于计算从键盘输入空格,换行符或制表符的次数。

然而,我不知道出了什么问题。无论输入多少空格或换行符,我的计数总是为零。

#include <stdio.h>

/*program to count blanks ,tabs and newlines */

int main()
{
       int cnt_space=0,cnt_newline=0,cnt_tab=0;
       int c;

       while(c=getchar()!=EOF)
       {
         if(c==' ')
         {
           ++cnt_space;
         }
         if(c=='\n')
         {
           ++cnt_newline;
         }
         if(c=='\t')
         {
           ++cnt_tab;
         }
       }

       printf("spaces=%d\nnewlines=%d",cnt_space,cnt_newline);
       return 0;
 }

2 个答案:

答案 0 :(得分:8)

更改此

while(c=getchar()!=EOF) 

while((c=getchar())!=EOF)

这个问题的原因是getchar返回值首先与EOF进行比较,结果为0或1.然后结果值存储在c中。所以它永远不会匹配任何条件。

首先将getchar与EOF进行比较的原因是因为!=运算符的优先级高于=运算符。

答案 1 :(得分:2)

您在循环标题中缺少一对括号:

while ( (c=getchar()) != EOF ) {
    ....
}

目前,您的作业需要getchar()!=EOF 10,并将其分配给c。这绝不匹配空格' ''\n'

要了解有关C中操作优先级的更多信息,请查看this chart。但是,通常情况下,添加一对括号来强制执行所需的操作顺序绝对不会受到伤害。如果您对正在编写的表达式中的操作优先级有疑问,那么您的读者也可能会有疑问。