定义:定义:文本流是一个字符序列,分为几行;每一行由零个或多个字符组成,后面跟着换行符。这个定义是从K&R逐字定义的。
我正在阅读K&R -C编程语言,我对输入和输出是如何发生的感到有点困惑。所以我写了一个小程序来看看它是如何工作的,这就是我得到的:

while循环获取一个字符,并将其保存为char c,然后执行putchar(c)等操作,直到我单击get (结束文本流),使我感到困惑的部分是:由于我输入的文本流putchar(c)似乎不工作(它肯定不会在循环的每一次迭代中打印c ),但一旦我点击return,我就会得到我输入的内容。
我认为正在发生以下情况,但我希望有人能证实或纠正它。当我在命令提示符的第一行中执行inputOutput.exe时,它就被设置为接收输入文本流(这不是程序的结果,而是命令提示符的工作方式)。当我在命令提示符中键入文本时,每个字符都被putchar(c)发送到“输出文本流”,但是在我点击键盘上的“返回”键之后,命令提示符就无法从命令提示符中看到该流,这时命令提示符结束输入模式,然后执行最后一个putchar(c),该putchar(c)调用要在命令提示符上显示的当前输出文本流。如果这是正确的,那么在我看来,代码显示本身的方式是由命令提示符的规则而不是C语言控制的,这是正确的吗?
发布于 2014-04-03 19:08:00
这是输入行缓冲的工件。许多控制台/程序都这样做,有时甚至允许高级输入编辑。尝试将您的控制台/程序置于直接模式/无缓冲状态。
发布于 2014-04-03 19:09:20
putchar(c)没有立即显示屏幕上的字符正在缓冲的原因。你可以加上:
fflush(stdout);就在
putchar(c);产出就更有意义了。
您也可以关闭缓冲,但通常您希望它。
您想要缓冲的原因是,如果您正在编写大量数据,C运行时缓冲文本并一次性(或一次刷新一个缓冲区)的速度要快得多。
对于C中的UI类型程序来说,这样做是正常的:
printf(... printing things);
printf(... printing some more things);
...
fflush(stdout); /* at this point everything will be seen by user */https://stackoverflow.com/questions/22846603
复制相似问题