C++编译的exe程序无法在其他未安装编译器的电脑正常运行如何解决
问题原因与解决方案
DLL缺失问题
默认编译C程序时采用动态链接模式,生成的exe依赖C标准库的动态链接文件,没有安装对应编译器或运行库的电脑会缺少这些dll文件。
你使用-static参数的解法是正确的:开启静态编译后,所有依赖的库代码会直接嵌入exe,无需额外附带dll,可直接在无运行环境的电脑上运行。
如果使用MSVC编译器,对应静态编译设置为:项目属性→C/C++→代码生成→运行库选择/MT(Release版)或/MTd(Debug版)
程序运行2秒自动关闭问题
这是控制台程序的普遍现象:程序执行完所有逻辑后会直接退出,窗口随之关闭,用户无法看到最终输出内容。
可任选以下方法解决:
- 在
main函数return 0;前添加system("pause");,程序运行到此处会暂停,等待用户按任意键后再退出 - 或添加
std::cin.get();,效果一致,无需调用system函数更规范 - 也可以让用户手动打开cmd窗口,将exe拖入cmd中运行,程序结束后cmd窗口不会自动关闭,可查看完整输出
代码可优化问题
你提供的代码存在几处潜在BUG,建议修复:
- 胜负判断逻辑错误:使用了赋值运算符
=而非比较运算符==,会导致判断永远为真// 错误写法 if (runs = target) // 正确写法 if (runs == target) - 数组越界访问:
int faces[3] = {0, 1, 1}; int flippedface = faces[rand() % 4]; // 数组长度为3,下标最大为2,模4会得到下标3导致越界 // 改为rand()%3即可 - 重复设置随机种子:多个函数内重复调用
srand(time(0)),time精度为秒,一秒内多次调用会得到相同种子,导致随机数重复,只需在main函数最开头调用一次srand(time(0))即可 - 数组初始化越界+赋值错误:
int possibleturns[10] = {0, 0, 1, 2, 3, 4, 5, 6}; possibleturns[9], possibleturns[10] = likelyturn; // 数组长度为10下标最大为9,访问10越界,且逗号运算符无法同时赋值两个元素 // 正确写法 possibleturns[8] = likelyturn; possibleturns[9] = likelyturn;makecomputerturnbowling函数内也存在相同的数组越界问题,需要将数组长度改为10后再给下标8、9赋值。
内容的提问来源于stack exchange,提问作者mwahi
相关产品推荐
相关产品推荐

