You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

《C程序设计语言》习题1.06疑问:输入Ctrl-D为何输出0D而非0?

输入Ctrl-D输出"0D"而非"0"的原因分析

代码逻辑回顾

你的代码逻辑明确:

#include <stdio.h>

main()
{
    printf("%d\n", getchar() != EOF);
}

当getchar()读取到EOF时,getchar() != EOF的结果为0,程序会输出0并紧跟一个换行符(\n)。

为什么会显示"0D"?

问题出在M1 Mac终端的回显行为上:

  • 在BSD系终端(M1 Mac默认终端基于此)中,Ctrl-D的作用分两种场景:
    1. 若输入缓冲区为空,Ctrl-D向程序发送EOF;
    2. 若缓冲区有内容,Ctrl-D仅将缓冲区内容提交给程序,不发送EOF。
  • 若你的终端关闭了echoctl设置(该设置用于将控制字符显示为^X格式,比如Ctrl-D显示为^D),按下Ctrl-D时终端会直接回显字符D,而非^D。
  • 当你在空缓冲区按下Ctrl-D,程序输出0\n,但终端同时回显了D,二者在屏幕上叠加显示成0D——实际上程序只输出了0和换行,D是终端对Ctrl-D的回显内容。

验证与解决方法

  • 执行终端命令开启echoctl:
    stty echoctl
    
    之后再运行程序并按下Ctrl-D,终端会显示^D而非D,你就能清晰看到程序输出的0和换行。
  • 确保按下Ctrl-D前输入缓冲区为空(即没有输入任何字符),避免Ctrl-D被当作缓冲区提交信号而非EOF。

内容的提问来源于stack exchange,提问作者JackSea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:17:28