Visual Studio下_getch()读取字符后带空格的问题及设置解决办法
解决Visual Studio中
_getch()额外读取空格的问题 嗨,这个问题我之前帮不少开发者处理过,本质是Visual Studio和CodeBlocks依赖的C运行时库(CRT)以及控制台默认配置的差异导致的,下面给你几个可行的解决方向:
方案一:调整控制台输入模式
Windows控制台默认的快速编辑模式可能会干扰_getch()的读取行为,你可以通过Windows API修改输入模式来规避这个问题。在代码的main函数开头加上这段代码:
#include <windows.h> int main() { // 调整控制台输入模式,禁用快速编辑和插入模式 HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); DWORD inputMode; GetConsoleMode(hStdin, &inputMode); SetConsoleMode(hStdin, inputMode & ~(ENABLE_QUICK_EDIT_MODE | ENABLE_INSERT_MODE)); // 你的原有代码 char ch = _getch(); // ... }
这段代码会关闭控制台的快速编辑和插入功能,避免这些特性产生的额外输入干扰_getch()的正常读取。
方案二:改用宽字符版本的_getwch()
Visual Studio的CRT对_getch()的实现和MinGW(CodeBlocks默认用的编译器)有细微差异,换成宽字符版本的_getwch()往往能解决这类字符读取异常。修改你的代码:
#include <conio.h> // 把char换成wchar_t,_getch()换成_getwch() wchar_t ch = _getwch(); if (ch != L' ') { // 你的逻辑 }
宽字符函数的读取逻辑更稳定,能避免多字节字符处理时的额外空格问题。
方案三:统一项目字符集设置
CodeBlocks默认用多字节字符集,而Visual Studio可能默认设置为Unicode字符集,这也会导致输入函数的行为差异。你可以按以下步骤调整:
- 右键点击你的项目 → 选择「属性」
- 在左侧导航栏找到「配置属性」→「常规」
- 将「字符集」选项改为「使用多字节字符集」
- 点击「应用」后重新编译项目
这样能让Visual Studio的字符处理逻辑和CodeBlocks保持一致,消除输入行为的差异。
额外排查提示
如果以上方法都没解决,你可以检查代码里有没有其他影响输入缓冲的逻辑(比如之前用scanf读取后没处理残留的换行符),不过既然你在CodeBlocks里完全正常,大概率还是VS的环境设置问题。
内容的提问来源于stack exchange,提问作者SMP




