getchar() 和输入缓冲区
getchar() and input buffer
书中的一个例子:
#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。
如果在循环之前去掉c = getchar();
,那么在第一次进入循环时c
的值将是indeterminate。因此,在打印一个字符并读取下一个字符之前,有必要读取一个值。
要输入 EOF,您可以按 CTRL-D 或 CTRL-Z,具体取决于您使用的是 Linux 还是 Windows。
书中的一个例子:
#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。
如果在循环之前去掉c = getchar();
,那么在第一次进入循环时c
的值将是indeterminate。因此,在打印一个字符并读取下一个字符之前,有必要读取一个值。
要输入 EOF,您可以按 CTRL-D 或 CTRL-Z,具体取决于您使用的是 Linux 还是 Windows。