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

使用_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:40:49