关于 C 中 getchar 的行为

On the behavior of getchar in C

我是 C 的完全初学者,如果这个问题听起来太琐碎了,我很抱歉。

我对 getchar()putchar() 的理解是它们一次处理 文本流 一个字符。假设我有这个程序,它从用户那里获取文本输入并将其显示在屏幕上:

#include <stdio.h>
main(){
    int c;
    c = getchar();
    while(c!= EOF){
        putchar(c);
        c=getchar();
    }
}

这是我认为正在发生的事情:

假设我运行这个程序并输入单词 Higetchar读取第一个字符(即H)存入c。然后程序进入while循环,把H放到屏幕上。然后它获取下一个字符 (i) 并打印它。然后是 EOF,当 getchar 将值赋给 c 时,while 循环结束。因此,根据对所发生情况的解释,程序应该在打印完所有字符并到达文件末尾后结束。

然而,当我运行程序时,在打印字符串之后,程序会等待接收额外的输入,这意味着它不会结束,而是等待用户输入更多的文本流。

为什么会发生这种情况,我在哪里弄错了?

当您键入 HiENTER 时,不会自动插入 EOF

相反,您需要按某些键才能生成 EOF。在 Unix 系统上,按 Ctrl + D,在 Windows 上,按 Ctrl + Z