计算C中的输入字符

时间:2014-03-22 11:56:47

标签: c

我刚刚开始学习C,正在阅读Keringhan和Ritchie的C教科书。教科书中有这个例子,用来计算用户输入的字符。这是代码:

#include <stdio.h>

main() 
{
    long nc;
    nc = 0;

    while(getchar() != EOF) {
        if (getchar() != 'q')       
            ++nc;
        else 
            break;      
    }

    printf("%ld\n", nc);        
}

问题是,当我执行代码时,如果我每行只输入一个字符,当我输入“q”来中断时,它不会这样做。我必须每行键入一些单词,之后才会打破循环。此外,它只计算单词的一半字符。即如果我输入

a
b
russia

它只会打印'5'作为最终结果。

请你解释一下为什么会这样?

1 个答案:

答案 0 :(得分:1)

这样可行,但只有在您完成输入后才能使用。因此,这将计算字符直到第一个“q”出现。这就是getchar()和getc(stdin)的工作原理。

#include <stdio.h>

int main() {
    char c = 0;
    long count = 0;
    short int count_linebreak = 1; // or 0

    while((c = getchar()) != EOF) {
        if(c != 'q' && (count_linebreak || (!count_linebreak && c != '\n'))) {
            ++count;
        }else if(c == 'q') {
            printf("Quit\n");
            break;
        }
    }

    printf("Count: %ld\n",count);

    return 0;
}

关于在输入之前读取stdin的StackOverflow问题 C read stdin buffer before it is submit