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

What's wrong with my count characters, words, lines program?

尝试编写一个 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;    
}

char 是保留字。您不能将变量命名为。

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

应该是

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

否则会被解释为

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

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

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