C++程序未接收vector输入直接终止 编译运行报错问题排查
问题说明
需要实现的功能为:读取输入的整数n,再依次读取n个整数存入vector容器,实现代码如下:
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<int> input(n); for (int i = 0; i < n; i++) { cin >> input[i]; } return 0; }
代码本身逻辑没有问题,在其他环境可以正常运行,但本地运行出现两个异常:
- 运行程序时,没有等待接收输入就直接终止
- Windows终端下编译直接报错,对应有编译报错、运行错误、程序执行后终端界面三张参考截图
测试用输入示例:
5 5 3 1 5 2
问题排查与解决
按以下顺序逐一排查即可解决:
- 先修复编译环境问题
打开终端执行g++ -v,如果提示找不到命令,说明MinGW的bin目录没有加入系统环境变量,先配置好环境变量,重启终端后再尝试编译。
如果能正常输出版本信息,检查你的代码文件存放路径、文件名是否包含中文、空格或者特殊字符,Windows下的g对非英文路径兼容很差,把文件移到纯英文路径下(比如D:\codes\test.cpp),再用标准命令编译:g++ test.cpp -o test.exe -std=c++11,显式指定C标准,避免旧编译器兼容问题。 - 修复程序不等待输入直接退出的问题
这个问题90%以上的诱因是编译失败:编译报错时不会生成新的可执行文件,你运行的是之前残留的损坏exe,自然会出现异常退出、不接收输入的情况。
确认编译成功生成新的test.exe后,不要直接双击exe运行,在终端中切换到exe所在目录,输入test.exe手动启动程序,再输入测试用例即可。
如果是控制台窗口一闪而过误以为程序没接收输入,在代码的return 0;前加两行代码强制程序停留:cin.ignore(); cin.get(); - 特殊情况排查
检查杀毒软件是否拦截了编译生成的exe,部分杀毒软件会误杀未签名的C++小程序,把代码目录加入白名单即可。
如果用的是几年前的老旧MinGW版本,直接换成winlibs版的MinGW-w64,能避免很多莫名其妙的兼容问题。
内容的提问来源于stack exchange,提问作者Ichchha Gupta
相关产品推荐
相关产品推荐

