嗨,大家好我只是用C语言使用Notepad ++和Cygwin来修复这个小程序。所以代码如下:
#include <stdio.h>
int main()
{
int c, i, countLetters, countWords;
int arr[30];
countLetters = countWords = 0;
for(i = 0; i < 30; ++i)
arr[i] = 0;
while(c = getchar() != EOF)
if(c >= '0' && c <= '9')
++arr[c - '0'];
else if (c == ' ' || c == '\n' || c == '\t')
++countWords;
else
++countLetters;
printf("countWords = %d, countLetters = %d\n",
countWords, countLetters );
}
但不是计算单词,程序将单词计为字母并将其打印为字母和单词= 0 ...我错了,因为即使我的老师也不能给我答案......
答案 0 :(得分:8)
尝试使用大括号,c = getchar()
需要括号。
while((c = getchar()) != EOF) {
^ ^
/* Stuff. */
}
答案 1 :(得分:6)
错误在于:
while(c = getchar() != EOF)
您需要将作业括在括号中,如下所示:
while( (c = getchar()) != EOF) /*** assign char to c and test if it's EOF **/
否则,它被解释为:
while(c = (getchar() != EOF)) /** WRONG! ***/
即。对于每个char读取,c为1,直到文件结束。
答案 2 :(得分:2)
解决方案:
更改while(c = getchar()!= EOF),while while((c = getchar())!= EOF)
<强>原因:强>
!=具有更高的优先级 比=
因此,
getchar()!= EOF
评估为假,从而成为
while(c = 1)==&gt;而(0)。
因此,循环以c = 1迭代,你的输入是什么。 (EOF除外)。
在这种情况下,您的表达式始终计算为false。
,因为
if(c> ='0'&amp;&amp; c&lt; ='9')是if(1&gt; = 48&amp;&amp; 1&lt; = 57)并且它总是假的。
此外,
否则if(c ==''|| c =='\ n'|| c =='\ t')
将被评估为假。
因此,将为所有输入执行else部分countLetters ++!
导致你的处方。