【发布时间】:2021-05-23 22:14:48
【问题描述】:
书中的一个例子:
#include <stdio.h>
main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
现在这本书没有解释太多,而是说 getchar() 读取下一个字符输入。我相信循环之前c = getchar() 的原因与输入缓冲区有关。我已经对它进行了研究,但仍然无法完全理解它。在此示例中,删除 c = getchar() 不会影响程序的运行方式。
在循环之前c = getchar() 的确切原因是什么?它与输入缓冲区有什么关系?另外:如何输入EOF?按 enter 或 -1 不会终止循环,所以在这种情况下,我不明白在这种情况下如何检查 EOF。
【问题讨论】:
-
要发出 EOF 信号,在 Windows 上键入 control-Z 或在 Mac 或 Linux 上键入 control-D。它必须在一行的开头。如果标准输入是一个文件而不是终端窗口,那么当文件中没有更多字符时,I/O 库将返回 EOF。这不是一个字符。
-
如果在你第一次执行
c = getchar()之前c没有值是不明显的,因此测试它是否有特定值是没有意义的,那么你读得太快了。