#include <stdio.h>
// copy input to output
// my version
int main()
{
int c;
printf("\n\nUse CONTROL + D to terminate this program\n\n");
while ((c = getchar()) != EOF) {
putchar(c);
}
if ((c = getchar()) == EOF) {
printf("\n\nProgram TERMINATED\n\n");
}
return 0;
}
当我输入 control + D 时,if
语句的正文将运行。这就是我想要的,但是当我更彻底地分析代码时,不应该再次询问我的输入,因为if
的条件是(c = getchar()) == EOF
?
答案 0 :(得分:2)
当您点击^D
时,该计划的输入已关闭,因此getchar()
随后将始终返回EOF
。
答案 1 :(得分:1)
Control-D是规范模式结束文件字符。当在行的处输入时,它会导致进程看到EOF条件,即读取返回0.但是,如果Control-D被输入到行的开头以外的某处它只是使读取立即返回到目前为止输入的内容。
如果你连续两次点击Control-D,你应该看到我认为你在问什么。
修改强>
Here是一个非常好的解释。
答案 2 :(得分:0)
^ D立即终止程序。因此,当^ D被击中时,你的getchar永远不会返回。
这就是为什么像python这样的REPL使用'exit()'退出。
如果需要,请尝试使用'q'退出: