【发布时间】:2019-03-16 23:55:54
【问题描述】:
#include <stdio.h>
int main()
{
int c;
while((c=getchar())!=EOF)
putchar(c);
return 0;
}
在我对 C 的有限接触中,只要 C!=EOF 就会执行 while 条件,它基本上会打印 c,然后等待下一个字符并尝试检查是否违反条件。因此,对于我们输入的每个字符,putchar 都会执行。 但是,当我运行可执行文件时,似乎发生的事情是打印语句仅在我按下换行符(Enter)时才起作用,并且它具有某种类型的缓冲区,可以在输入中打印整行。 在按下新行之前,我看不到代码中将保存字符的任何缓冲区,那么这里正在做什么? 在按下新行之前,这些字符将存储在哪里?
【问题讨论】:
-
在您的终端中,按回车后,在用于标准输入的
FILE结构中。 -
你如何区分你是在读取行块中的字符还是单独读取字符?您的程序运行得非常快,可能不会让您有机会看到它是如何进行的。终端以行模式工作,允许您在将输入发送到程序之前对其进行编辑。请参阅我的答案以获得更完整的解释。
-
"那么这里正在做什么" 您的终端/控制台/任何智能的东西都可以让您在将输入发送到程序之前对其进行编辑。 “在按下新行之前,这些字符在哪里存储”在终端驱动程序中。此外,标准库中还有缓冲区(您可以禁用)。