首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >K&R的C语言: 1.5节字符输入和输出

K&R的C语言: 1.5节字符输入和输出
EN

Stack Overflow用户
提问于 2014-04-03 19:01:34
回答 2查看 716关注 0票数 1

定义:定义:文本流是一个字符序列,分为几行;每一行由零个或多个字符组成,后面跟着换行符。这个定义是从K&R逐字定义的。

我正在阅读K&R -C编程语言,我对输入和输出是如何发生的感到有点困惑。所以我写了一个小程序来看看它是如何工作的,这就是我得到的:

while循环获取一个字符,并将其保存为char c,然后执行putchar(c)等操作,直到我单击get (结束文本流),使我感到困惑的部分是:由于我输入的文本流putchar(c)似乎不工作(它肯定不会在循环的每一次迭代中打印c ),但一旦我点击return,我就会得到我输入的内容。

我认为正在发生以下情况,但我希望有人能证实或纠正它。当我在命令提示符的第一行中执行inputOutput.exe时,它就被设置为接收输入文本流(这不是程序的结果,而是命令提示符的工作方式)。当我在命令提示符中键入文本时,每个字符都被putchar(c)发送到“输出文本流”,但是在我点击键盘上的“返回”键之后,命令提示符就无法从命令提示符中看到该流,这时命令提示符结束输入模式,然后执行最后一个putchar(c),该putchar(c)调用要在命令提示符上显示的当前输出文本流。如果这是正确的,那么在我看来,代码显示本身的方式是由命令提示符的规则而不是C语言控制的,这是正确的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-03 19:08:00

这是输入行缓冲的工件。许多控制台/程序都这样做,有时甚至允许高级输入编辑。尝试将您的控制台/程序置于直接模式/无缓冲状态。

票数 3
EN

Stack Overflow用户

发布于 2014-04-03 19:09:20

putchar(c)没有立即显示屏幕上的字符正在缓冲的原因。你可以加上:

代码语言:javascript
复制
fflush(stdout);

就在

代码语言:javascript
复制
putchar(c);

产出就更有意义了。

您也可以关闭缓冲,但通常您希望它。

您想要缓冲的原因是,如果您正在编写大量数据,C运行时缓冲文本并一次性(或一次刷新一个缓冲区)的速度要快得多。

对于C中的UI类型程序来说,这样做是正常的:

代码语言:javascript
复制
printf(... printing things);
printf(... printing some more things);
...
fflush(stdout); /* at this point everything will be seen by user */
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22846603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档