定义: 文本流是一个序列 字符分为几行;每行包含零个或多个字符,后跟换行符。该定义从K& R逐字逐句。
我正在阅读K& R C编程语言,我对输入和输出的发生方式感到有些困惑。所以我写了一个小程序来看它是如何工作的,这就是我得到的:
while
循环获取一个字符并将其保存为char c
然后执行
putchar(c)
等等,直到我点击返回(结束文本流),让我困惑的部分是:当我输入文本流 {{1似乎没有工作(确实不会在循环的每次迭代中打印putchar(c)
),但是一旦我点击返回,我就会收到我输入的内容。
我认为以下情况正在发生,但我希望有人可以确认或纠正它。一旦我在命令提示符的第一行执行c
,它就会被设置为接收输入文本流(这不是程序的结果,而是命令提示符的结果当我在命令提示符中键入文本时,每个字符都被发送到"输出文本流"通过inputOutput.exe
,但是直到我在键盘上返回后才能从命令提示符看到该流,此时命令提示符结束输入模式,然后它执行最后putchar(c)
调用要在命令提示符上显示的当前输出文本流。如果这是正确的话,在我看来,代码清单本身由命令提示符的规则而不是C语言管理的方式,这是正确的吗?
答案 0 :(得分:3)
这是输入上的行缓冲工件。许多控制台/程序执行此操作,有时甚至允许高级输入编辑。尝试将控制台/程序置于直接模式/无缓冲。
答案 1 :(得分:2)
putchar(c)没有立即显示屏幕上的字符是缓冲的原因。 你可以添加:
fflush(stdout);
之后
putchar(c);
并且输出会更有意义。
你也可以关闭缓冲,但通常你想要它。
你想要缓冲的原因是,如果你要写出大量的数据,那么C-runtime可以更快地缓冲文本并将其一次性清除(或者缓冲区中的缓冲区)时间)。
C中的UI类型程序是正常的:
printf(... printing things);
printf(... printing some more things);
...
fflush(stdout); /* at this point everything will be seen by user */