【问题标题】:getchar() and input buffergetchar() 和输入缓冲区
【发布时间】: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没有值是不明显的,因此测试它是否有特定值是没有意义的,那么你读得太快了。

标签: c buffer getchar


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多