我正在研究K&R的“C编程语言”,而示例1.5让我很困惑:
#include <stdio.h>
/* copy input to output; 1st version */
int main(int argc, char *argv[])
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
return 0;
}
我了解到,“getchar()”使用一个字符作为“putchar()”来显示。但是,当我在终端中运行程序时,为什么可以传递整行字符供'putchar()'显示?
最佳答案
因为您的终端是行缓冲的。 getchar()
和putchar()
仍然仅适用于单个字符,但是终端会等待将字符提交给程序,直到您输入了整行为止。然后getchar()
一对一地从该缓冲区中获取字符,并且putchar()
一对一地显示它们。
添加:终端是行缓冲的,这意味着当遇到换行符时,它将输入提交给程序。通常一次提交数据块而不是一个字符更为有效。它还为用户提供了在按Enter之前编辑该行的机会。
注意:可以通过禁用canonical mode for the terminal并在NULL
上使用stdin
调用setbuf来关闭行缓冲。
关于c - getchar()和putchar()函数背后的理论,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17552458/