我正在学习C编程语言" C编程语言"我遇到了getchar()
让我感到困惑的事情。显然,当我在程序中调用getchar()
时,输入文本存储在缓冲区中,然后getchar()
逐个读取此缓冲区中的字符,直到看到EOF
。我可以指示getchar()
在同一个缓冲区上第二次执行此过程吗?例如,以下程序中的第二个循环不会为我运行。是否有可能重置"第一次循环后getchar()
?
#include <stdio.h>
int main()
{ int c,d;
c = d = 0;
while((c = getchar()) != EOF) printf("foo");
while((d = getchar()) != EOF) printf("bar");
}
答案 0 :(得分:3)
它不是getchar()
缓冲的,而是你的终端。点击 Enter 后,终端会立即将您输入的整行发送到您的程序。从你的节目的角度来看,没有缓冲区,你只是静坐十秒钟,然后眨眼就输入一整句话。
你可以通过制作一个getchar()
的循环来验证它,并输出它立即收到的字符:输出将不与输入交错,它将只有在您按下 Enter 。
因此,如果要重用已知的缓冲区,则需要程序通过fgets()
将其读入实际缓冲区,然后根据需要使用该缓冲区。
答案 1 :(得分:2)
为简单起见,getchar()不会在缓冲区中读取,而是在键盘输入流中读取,通常称为 stdin (标准输入)。
getchar()不会从流中查看char,但消耗每个调用的char,这意味着 read&amp;从流中删除字符。 因此,当您在流的末尾时,您将获得一个eof(文件结尾),通知您其中没有更多字符。
然后stdin通常是行缓冲,这意味着一个完整的输入行,一系列由换行符终止的字符,在时间上可用。