0

好的伙计们,所以我写了这个程序

#include <stdio.h>

/* count words */

main ()
{

    int c, c2;
    long count = 0;

    while ((c = getchar()) != EOF)
    {
        switch(c)
        {
        case ' ':
        case '\n':
        case '\t':
            switch(c2)
            {
            case ' ':
            case '\n':
            case '\t':
                break;
            default:
                ++count;
            }
        }
        c2 = c;
    }
    printf("Word count: %ld\n", count);
}

如您所见,它计算输入中的单词。所以我写了一个名为 a-text 的文件,它只有

a text

我在 ubuntu 提示符下写了

./cw < a-text

它写道

Word count: 2

那么,到底是什么?它不应该只计算 1,因为在第二个单词之后没有制表符、新行或空格,只有 EOF。为什么会这样?

4

2 回答 2

0

为什么不计算单词而不是空格?那么当输入以空格结尾时你就没有问题了。

#include <ctype.h>
#include <stdio.h>

int main(int argc, char**argv) {
    int was_space = 1;
    int c;
    int count = 0;
    while ((c = getchar()) != EOF) {
        count += !isspace(c) && was_space;
        was_space = isspace(c);
    }
    printf("Word count: %d\n", count);
    return 0;
}
于 2013-06-22T06:08:35.993 回答
0

让我们看看“文本”会发生什么

after the first iteration, c2 == 'a', count remains 0
now comes c == ' ' c2 is still 'a', so count == 1, c2 becomes == ' '
now comes c == 't' c2 is still ' '. so count remains == 1
...
now comes c == '\n' c2 is the last 't'. count becomes == 2

IOW

"a text\n"
  ^----^-------- count == 1
       |
       +-------- count == 2
于 2013-06-22T06:34:18.907 回答