1

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

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

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

2 回答 2

8

改变这个

while(c=getchar()!=EOF) 

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

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

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

于 2012-06-29T15:34:50.087 回答
2

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

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

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

要了解有关C 中操作优先级的更多信息,请查看此图表。但是,一般来说,添加一对括号来强制执行您需要的操作顺序永远不会有什么坏处。如果您对正在编写的表达式中的操作优先级有疑问,那么您的读者很可能也会有疑问。

于 2012-06-29T15:35:17.587 回答