关于 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();
}
}
这是我认为正在发生的事情:
假设我运行这个程序并输入单词 Hi。 getchar
读取第一个字符(即H
)存入c
。然后程序进入while循环,把H
放到屏幕上。然后它获取下一个字符 (i
) 并打印它。然后是 EOF
,当 getchar
将值赋给 c 时,while 循环结束。因此,根据对所发生情况的解释,程序应该在打印完所有字符并到达文件末尾后结束。
然而,当我运行程序时,在打印字符串之后,程序会等待接收额外的输入,这意味着它不会结束,而是等待用户输入更多的文本流。
为什么会发生这种情况,我在哪里弄错了?
当您键入 Hi
和 ENTER 时,不会自动插入 EOF
。
相反,您需要按某些键才能生成 EOF
。在 Unix 系统上,按 Ctrl + D,在 Windows 上,按 Ctrl + Z。
我是 C 的完全初学者,如果这个问题听起来太琐碎了,我很抱歉。
我对 getchar()
和 putchar()
的理解是它们一次处理 文本流 一个字符。假设我有这个程序,它从用户那里获取文本输入并将其显示在屏幕上:
#include <stdio.h>
main(){
int c;
c = getchar();
while(c!= EOF){
putchar(c);
c=getchar();
}
}
这是我认为正在发生的事情:
假设我运行这个程序并输入单词 Hi。 getchar
读取第一个字符(即H
)存入c
。然后程序进入while循环,把H
放到屏幕上。然后它获取下一个字符 (i
) 并打印它。然后是 EOF
,当 getchar
将值赋给 c 时,while 循环结束。因此,根据对所发生情况的解释,程序应该在打印完所有字符并到达文件末尾后结束。
然而,当我运行程序时,在打印字符串之后,程序会等待接收额外的输入,这意味着它不会结束,而是等待用户输入更多的文本流。
为什么会发生这种情况,我在哪里弄错了?
当您键入 Hi
和 ENTER 时,不会自动插入 EOF
。
相反,您需要按某些键才能生成 EOF
。在 Unix 系统上,按 Ctrl + D,在 Windows 上,按 Ctrl + Z。