我为什么算0个字?

时间:2014-12-22 03:59:21

标签: c visual-studio-2012

我正在使用C.目标是获取输入,并使用switch语句而不是if语句计算字符,单词和行...我把字符和线条算得很好,但我一直得到0个字。为什么呢?

#include <stdio.h>

#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */

int main()
{
    int c, nl, nw, nc, state;

    printf("Please input some text!\n");

    state = OUT;
    nl = nw = nc = 0;
    while ((c = getchar()) != EOF) {
        ++nc;

        switch(c)
        {
            case '\n':
                c = '\n'; 
                ++nl; break;
            case IN:
                c = IN;
                ++nw; break;
        }
    }
    printf("Characters %d\nWords %d\nLines %d\n", nc, nw, nl);
    return 0;
}

目标是使用switch语句在下面执行此操作。

if (c == '\n')
            ++nl;
        if (c == ' ' || c == '\n' || c == '\t')
            state = OUT;
        else if (state == OUT) {
            state = IN;
            ++nw;

1 个答案:

答案 0 :(得分:2)

要翻译更新代码中的代码以使用开关,您需要执行此操作

#include <stdio.h>

#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */

int main()
{
    int c, nl, nw, nc, state;

    printf("Please input some text!\n");

    state = OUT;
    nl = nw = nc = 0;
    while ((c = getchar()) != EOF) {
        ++nc;

        switch(c)
        {
            case '\n':
                ++nl;
            case ' ':
            case '\t':
                state = OUT;
                break;
            default:
                if (state == OUT)
                    ++nw;
                state = IN;
                break;
        }

    }
    printf("Characters %d\nWords %d\nLines %d\n", nc, nw, nl);
    return 0;
}

在原始代码中,您永远不会更改state的值,并且case IN永远不会发生,因为您检查getchar()返回的值是'\1'它永远不会是,所以nw没有增加。