c - 空白计数程序给出不正确的输出

标签 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;
 }

最佳答案

改变这个

while(c=getchar()!=EOF) 

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

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

之所以先将 getchar 与 EOF 进行比较,是因为 != 运算符的优先级高于 = 运算符。

关于c - 空白计数程序给出不正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11264709/

相关文章:

c - 可变大小栈帧的汇编(关于局部变量的栈)

检查c中的shell命令返回值

c - 查找中断 sleep 的原因()

python - 使用 numpy 中的 ctypeslib 返回错误

mysql - 当我尝试将我的变量插入我的数据库时,它被插入为零而不是预期值

c - 不使用完整路径的c语言中同一目录下的fopen文件

c - 获取 malloc 宏的不相关值 - M_MMAP_THRESHOLD 和 M_ARENA_MAX

c - 指针问题未解决

c - 结构体成员 char * 在函数调用中作为参数初始化

c - 以十六进制读取2个字节并使用C语言fscanf转换为十进制