我刚刚开始学习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'作为最终结果。
请你解释一下为什么会这样?
答案 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