下面是我编写的一个小程序,用于计算从键盘输入空格,换行符或制表符的次数。
然而,我不知道出了什么问题。无论输入多少空格或换行符,我的计数总是为零。
#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;
}
答案 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
1
或0
,并将其分配给c
。这绝不匹配空格' '
或'\n'
。
要了解有关C中操作优先级的更多信息,请查看this chart。但是,通常情况下,添加一对括号来强制执行所需的操作顺序绝对不会受到伤害。如果您对正在编写的表达式中的操作优先级有疑问,那么您的读者也可能会有疑问。