VSCode运行C/C++程序弹出黑框是因externalConsole设为true或console设为"externalTerminal";应修改launch.json中对应配置为false或"integratedTerminal",并检查tasks.json和Code Runner设置避免调用cmd.exe。

VSCode 运行 C/C++ 程序时弹出黑框(外部 CMD 窗口)不是 bug,而是配置明确启用的结果;如果你不想要黑框,说明 externalConsole 或 console 被设为了 true 或 "externalTerminal" —— 关键是定位并改掉它,而不是加 system("pause") 来“补救”。
怎么关掉黑框:查 launch.json 里的 externalConsole
绝大多数黑框来自调试运行(F5),根源在 .vscode/launch.json 的调试配置里。打开该文件,找到当前使用的 configuration(比如 "name": "C++ (Windows) 启动"),检查是否含以下任一字段:
-
"externalConsole": true→ 直接删掉这行,或改为false -
"console": "externalTerminal"→ 改为"console": "integratedTerminal"(仅适用于新版 C++ 扩展 + cppdbg/cppvsdbg 调试器)
改完保存,F5 再运行,输出就回到 VSCode 底部的内置终端,不会弹窗。注意:externalConsole 是旧版 C++ 扩展(如使用 cppvsdbg)的字段;console 是新版(cppdbg)才支持的等效字段,二者不要共存。
为什么 tasks.json 里写 start cmd /c 也会闪黑框
如果你用的是 Code Runner 插件或自定义 tasks.json 来运行程序,黑框往往来自显式调用 start cmd /c 或 cmd.exe /k。例如:
"command": "cmd.exe",
"args": ["/c", "${fileDirname}/${fileBasenameNoExtension}.exe"]
这种写法本质就是启动一个新 CMD 窗口,执行完立刻关闭。解决方式很简单:
- 删掉
cmd.exe这一层,直接让 VSCode 执行生成的 exe:"command": "${fileDirname}/${fileBasenameNoExtension}.exe" - 如果必须用 CMD(比如要保留环境变量),把
/c换成/k,它会保持窗口打开,但这是权宜之计,不是根本解法 - Code Runner 用户可进设置搜
code-runner.executorMap,把命令里start cmd /c全部删掉
黑框一闪而过?别急着加 getchar(),先看是不是配置错了
很多人遇到黑框一闪而过,第一反应是往代码末尾加 getchar() 或 system("pause")。但这只掩盖了问题——真正该问的是:你到底需不需要黑框?
- 如果只是想输入/输出交互,内置终端完全支持,无需黑框;加
getchar()反而会让调试时卡住,不方便反复运行 - 如果程序本身没阻塞逻辑(比如没
scanf、没循环),那黑框闪退是正常行为,说明程序执行完了;强行加 pause 是反模式 - 只有当你明确需要脱离 VSCode 独立操作(比如测试鼠标/全屏/控制台颜色),才该保留黑框,并用
/k或调试器的externalConsole: true配合
最常被忽略的一点:同一个项目可能同时存在 launch.json(调试用)、tasks.json(构建/运行用)、settings.json(插件全局配置),三者都可能触发黑框。改一处没用,得全盘扫一遍。


















