不用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
相关产品推荐
相关产品推荐

