getchar()和输入缓冲区

getchar()和输入缓冲区,c,buffer,getchar,C,Buffer,Getchar,书中的一个例子: #include <stdio.h> m

书中的一个例子:

#include <stdio.h>                                                                                                  
                                                                                                                    
main()                                                                                                              
{                                                                                                                   
        int c;                                                                                                      
        c = getchar();                                                                                              
        while (c != EOF) {                                                                                          
                putchar(c);                                                                                         
                c = getchar();                                                                                      
        }                                                                                                           
}         
#包括
main()
{                                                                                                                   
INTC;
c=getchar();
而(c!=EOF){
普查尔(c);
c=getchar();
}                                                                                                           
}         
现在这本书没有解释太多,但是说getchar()读取下一个字符输入。我相信在循环必须处理输入缓冲区之前,使用
c=getchar()
的原因。我已经对它做了研究,但仍然不能完全理解它。在本例中,删除
c=getchar()
不会影响程序的运行方式


循环之前的
c=getchar()
的确切原因是什么?它与输入缓冲区有什么关系?另外:如何输入EOF?按enter键或-1键不会终止循环,因此在这种情况下,我不明白在这种情况下如何需要检查EOF。

如果删除
c=getchar()
在循环之前,
c
的值将在首次进入循环时不确定。因此,在打印一个字符并读取下一个字符之前,必须先读取一个值


要输入EOF,您可以按CTRL-D或CTRL-Z,具体取决于您使用的是Linux还是Windows。

要发出EOF信号,请在Windows上键入control-Z,或在Mac或Linux上键入control-D。它必须在一行的开头。如果标准输入是文件而不是终端窗口,则当文件中没有更多字符时,I/O库将返回EOF。它不是一个字符。如果在您第一次执行
c=getchar()
之前,
c
没有明显的值,因此检查它是否有特定值的测试是没有意义的,那么您的读取速度太快了。