错误的C程序输出错误

时间:2011-09-01 09:10:28

标签: c

嗨,大家好我只是用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 ...我错了,因为即使我的老师也不能给我答案......

3 个答案:

答案 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 ++!

导致你的处方。