VS Code生成的.exe双击运行无输出、窗口闪退问题咨询
解答
你的认知完全正确,编译生成的.exe就是具备完整输入、计算、输出功能的可执行程序。双击运行时窗口直接消失看不到输出,是Windows控制台程序的通用运行特性导致的,你的程序逻辑本身没有问题——VS Code内置终端中运行正常已经可以佐证这一点。
闪退原因
直接双击控制台类.exe启动程序时,Windows会为程序临时分配一个独立的控制台窗口,程序从main函数入口开始按顺序执行读取输入、逻辑运算、打印输出的全流程,一旦运行到末尾的return 0;就会立刻终止,临时创建的控制台窗口也会同步销毁。从输出内容打印到窗口销毁的间隔只有几毫秒,人眼根本来不及识别输出内容。
而VS Code内置终端是独立于你的程序常驻的,程序退出后终端不会关闭,所有输出都会保留在界面中,因此可以正常查看结果。
解决方法
不改代码的临时运行方式
不需要修改源码就能正常查看输出:
- 打开
.exe所在的文件夹 - 按住
Shift键在文件夹空白处点击右键,选择「在此处打开PowerShell窗口」或「在此处打开终端」 - 在弹出的终端中输入
.\[你的exe文件名].exe回车启动,输入完12个数字后即可看到输出,程序退出后终端不会自动关闭。
适配双击运行的代码修改
如果希望双击.exe也能停留显示结果,只需要在代码中return 0;语句前添加两行代码,让程序执行完逻辑后等待用户按键再退出即可:
cin.ignore(); // 清空之前输入残留在缓冲区的换行符 cin.get(); // 等待用户按下任意按键后再执行退出
额外代码优化提示:你当前代码中
int matrix[n][m];的写法不属于标准C语法(标准C不支持使用变量作为数组长度的变长数组),仅在GCC等部分编译器的非标准扩展下可以编译通过,换用MSVC等其他编译器会直接报错,建议替换为固定长度数组或者vector容器存储矩阵内容。
原问题代码
#include <iostream> #include <cstdio> using namespace std; int main() { int n = 3, m = 4; int matrix[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> matrix[i][j]; } }; int col1[4]; int col2[4]; int col3[4]; int col4[4]; //создание 4 массивов-столбцов (creating 4 column arrays) for (int l = 0; l < n; l++) { for (int k = 0; k < m; k++) { if ((k % 4) == 0) { col1[l] = matrix[l][k]; } else if (((k - 1) % 4) == 0) { col2[l] = matrix[l][k]; } else if (((k - 2) % 4) == 0) { col3[l] = matrix[l][k]; } else if (((k - 3) % 4) == 0) { col4[l] = matrix[l][k]; } }; }; //поиск крайнего левого столбца только положительных чисел (finding the leftmost column of only positive numbers) int c = 0, s = 0; for (int g = 0; g < m; g++) { if (g == 0) { for (int d = 0; d < n; d++) { if (col1[d] <= 0) { c++; } }; if (c == 0) { s++; cout << "col 1"; break; }; c = 0; } else if (g == 1) { for (int d = 0; d < n; d++) { if (col2[d] <= 0) { c++; } }; if (c == 0) { s++; cout << "col 2"; break; }; c = 0; } else if (g == 2) { for (int d = 0; d < n; d++) { if (col3[d] <= 0) { c++; } }; if (c == 0) { s++; cout << "col 3"; break; }; c = 0; } else if (g == 3) { for (int d = 0; d < n; d++) { if (col4[d] <= 0) { c++; } }; if (c == 0) { s++; cout << "col 4"; break; }; c = 0; } }; if (s == 0) { cout << "No positive columns"; }; return 0; }
内容的提问来源于stack exchange,提问作者VladymyrTsyb
相关产品推荐
相关产品推荐

