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。