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

har*_*ris 1 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;
 }
Run Code Online (Sandbox Code Playgroud)

jn1*_*1kk 8

改变这个

while(c=getchar()!=EOF) 
Run Code Online (Sandbox Code Playgroud)

while((c=getchar())!=EOF)
Run Code Online (Sandbox Code Playgroud)

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

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