#include <stdio.h>
int main() {
char read = ' ';
while ((read = getchar()) != '\n') {
putchar(read);
}
return 0;
}
我的输入是f
(当然,后面要输入回车键)。我预计getchar()
再次要求输入,但程序被终止。怎么会?我怎样才能解决这个问题?
终端有时可能会有点混乱。您应该将程序更改为:
#include <stdio.h>
int main() {
int read;
while ((read = getchar()) != EOF) {
putchar(read);
}
return 0;
}
这将一直读取到 getchar 从终端读取 EOF(大多数时候该宏扩展为 -1)。 getchar 返回一个 int,因此您应该将变量“读”为整数,以便您可以检查 EOF。您可以在 Linux 上使用 ^D 从终端发送 EOF,我认为在 Windows 上使用 ^Z (?)。
解释一下发生了什么。在你的程序中的表达式
(read = getchar()) !='\n'
只要没有从缓冲区读取 '\n' 就为 true。问题是,要获取程序的缓冲区,您必须按与“\n”相对应的回车键。
当您的程序在终端中被调用时,会发生以下步骤:
~$\a.out
这会启动你的程序
(empty line)
getchar() 进行系统调用以从终端获取输入,然后终端接管
f
您在终端中进行了输入。 “f”被写入缓冲区并在终端上回显,您的程序还不知道该字符。
f
f~$
你按下回车键。您的缓冲区现在包含“f\n”。 “输入”还向终端发出信号,表明它应该返回到您的程序。你的程序
读取缓冲区并找到 f 并将其放到屏幕上,然后找到 '\n' 并立即停止循环并结束程序。
这将是大多数终端的标准行为。您可以更改此行为,但这取决于您的操作系统。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)