使用_getche()后printf()首字符丢失问题求助
问题分析与解决
问题原因
你的问题出在_getche()函数的特性上:
_getche()会自动回显输入的字符到控制台,包括Esc键对应的ASCII 27控制字符- 在Windows/DOS类控制台环境中,单独的Esc控制字符被回显后,会触发终端的特殊行为——通常是光标回退或行首定位,导致后续
printf输出的"The result..."开头的'T'被覆盖,出现"he result is..."的异常输出 - 输入达到20字符上限时,程序直接跳出循环,没有触发Esc键的读取与回显,所以输出正常;部分字符前显示正常是因为这些字符的输入改变了终端的状态,抵消了Esc控制字符的影响
解决方案
把_getche()替换为_getch()即可解决问题。_getch()的功能是读取字符但不回显,这样Esc键的控制字符不会被输出到控制台,也就不会干扰后续的printf内容。同时为了保持原有的交互体验,需要手动回显用户输入的字符:
修改后的代码:
#include "stdio.h" #include "conio.h" int main() { printf("conio.h _getch test\n\n"); char text[21], c; int n = 0; printf("Please enter your text: "); while (1) { if (n == 20) { text[n] = 0; break; } c = _getch(); // 替换为不回显的_getch() if (c == 27) { text[n] = 0; break; } text[n] = c; putchar(c); // 手动回显输入字符,保留原交互逻辑 n = n + 1; } printf("\n\nThe result is \"%s\"\n", text); return 0; }
内容的提问来源于stack exchange,提问作者Karl Kadak
相关产品推荐
相关产品推荐

