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

不用termios.h控制stdin无回显并收集输入的实现疑问

不用termios.h实现终端打字游戏的可行性及解决方法

你的目标完全可以实现,核心是绕过termios.h直接控制标准IO的缓冲行为,并处理终端回显问题:

  • 调整stdin缓冲模式:默认情况下stdin是行缓冲,只有输入回车时才会把数据提交给程序。可以用setvbuf将其改为无缓冲模式,这样输入的每个字符都会立即被程序读取:

    setvbuf(stdin, NULL, _IONBF, 0);
    
  • 控制终端回显:可以通过调用系统命令临时修改终端属性。在程序启动时执行system("stty -echo")关闭回显,退出前执行system("stty echo")恢复,避免影响后续终端使用。

  • 逐字符读取与反馈:用fgetc(stdin)或getchar()逐个读取输入字符,对比目标字符串后,通过ANSI转义序列控制输出颜色(比如蓝色\033[34m、红色\033[31m,重置\033[0m),直接在stdout输出对应内容。

你当前最小示例的问题大概率是没修改stdin的缓冲模式,导致输入字符被终端行缓冲暂存,没有立即传递给程序,所以缓冲区始终是初始状态。调整缓冲模式后,就能正常收集每个输入字符了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 13:14:55