【发布时间】:2016-04-18 18:59:13
【问题描述】:
我浏览了有关此 K&R 示例的网站,答案似乎围绕着“为什么这是 int 类型或 EOF 是什么?”有点家伙。我相信我理解这些。 这是我不明白的结果。我原以为这段代码会接收一个字符,打印它然后等待另一个字符或 EOF。
我看到的结果是输入等待直到我按下回车键,然后我输入的所有内容都会显示出来,等待输入的时间越长。
while 循环是否只是“循环”,直到我以 carrage return 结束文本流,然后显示 putchar(c) 隐藏在某处的内容?
代码是:
#include <stdio.h>
/* copy input to output: 1st version */
main()
{
int c;
c = getchar();
while(c != EOF) {
putchar(c);
c = getchar();
}
}
现在,如果我在此之前偷偷输入一个 putchar(c),就可以得到我所期望的结果。我仍然必须输入文本流并按回车键。结果是流的第一个字符,程序退出。
显然对我来说还有很大的差距。
感谢您的帮助
【问题讨论】:
-
不要使用 K&R 编码风格,它已被弃用。 C 在过去 > 17 年中不断发展。关于您的文字:不确定您的具体问题是什么。这不是一个教程网站。
-
那是因为标准输入和输出被缓冲了:你输入的字符被存储在内部,直到你按下回车,然后被批量处理。同样,输出字符将被存储,直到您打印一个换行符,此时所有内容都被刷新。如果你想要输入和输出之间直接对应,你必须使用特殊的库而不是控制台 I/O。
-
而
CR(又名回车)不会终止流。 -
@Olaf 第一个版本教的是旧的、准标准的 C,这是正确的。应该避免。第二个版本教授 ANSI-C,这仍然非常相关。大量的 C 仍然是用 ANSI-C 编写的。
-
Suffering From Buffering 可能会有所帮助。