终端键盘触发EOF的操作疑问与K&R C字符计数程序执行问题
关于K&R C字符计数程序EOF触发问题的解答
Windows终端的EOF触发规则
- Windows命令行中,
Ctrl+Z只有作为单独一行的起始输入时,才会被识别为EOF信号。如果和普通字符放在同一行,它会被当成ASCII码为26的普通控制字符,不会触发输入流终止。 - 你输入“123456789”回车后,程序已经读取了9个数字+1个换行符(共10个字符),但因为没收到EOF,所以一直等待输入;此时单独输入
Ctrl+Z再回车,终端才会发送EOF,程序终止并输出10,这是符合预期的。
为什么“123456789CtrlZ”+回车无反应
当Ctrl+Z和数字在同一行输入时,终端不会将其解析为EOF信号,而是把这个控制字符作为普通数据传给程序。程序会继续调用getchar()等待后续输入,因此不会输出结果也不会终止。只有让Ctrl+Z单独占一行(或在一行开头),才会触发EOF。
CLion中无法触发EOF的解决办法
CLion的内置控制台默认不支持通过快捷键发送EOF,这是IDE环境的限制,你可以用两种方式处理:
- 手动点击控制台的红色停止按钮终止程序;
- 修改程序逻辑,添加自定义终止条件,比如输入
'q'时退出,示例代码如下:
#include <stdio.h> int main() { long nc = 0; int c; while ((c = getchar()) != EOF && c != 'q') { ++nc; } printf("%ld\n", nc); return 0; }
内容的提问来源于stack exchange,提问作者Xejo
相关产品推荐
相关产品推荐

