我的计数字符,单词,行程序有什么问题?

时间:2019-01-30 01:47:50

标签: c count character line

尝试编写一个C程序:

计算从标准输入读取的字符,单词和行的数量,直到达到EOF。 假设输入是任意长度的ASCII文本。 单词被定义为连续的字母序列(a到z,A到Z)和撇号(',值39个十进制),用这些范围之外的任何字符分隔。 行定义为由换行符('\ n')分隔的连续字符序列。 最终换行符之后的字符将不包括在行数中。

我写了以下内容,可以很好地计算字符数,但不计算任何单词或行数。我不明白为什么。

#include <stdio.h>

int main() {

    unsigned long int countchar=0;
    unsigned long int word=0;
    unsigned long int line=0;

    int c;

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

        countchar++;

        if ((c>='A' && c<= 'Z') || (c>='a' && c<= 'z') || (c==39)) {    
            word++;
        }

        else if (c=='\n') {
            line++;
        }
    }

    printf("%lu %lu %lu\n", countchar, word, line);

    return 0;    
}

3 个答案:

答案 0 :(得分:1)

char是保留字。您无法命名一个变量。

答案 1 :(得分:0)

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

应该是

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

因为否则它将被解释为

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

答案 2 :(得分:0)

您正在将单词中的每个字母都视为单词。 应该对其进行更改,以检查它是否不是单词中的任何字母,然后删除其他字母。 您可能需要添加一些额外的检查,以便仅在最后一个字母在单词中时才增加单词。

if (!((c>='A' && c<= 'Z') || (c>='a' && c<= 'z') || (c==39)) {
    word++;
}
if (c=='\n') {
    line++;
}