如何让C++计算器程序运行后保持控制台窗口不关闭?
我太懂这种困扰了——好不容易写完计算器代码,运行刚看到结果窗口就闪没了,连看清楚结果的机会都没有😅。这其实是Visual Studio运行控制台程序的默认行为:当main()函数执行到return 0时,程序就结束了,系统会直接关闭控制台窗口。下面给你几种靠谱的解决方法,结合你的代码来改:
方法1:用你已经包含的_getch()(最简单)
你代码里已经引入了<conio.h>,这个头文件里的_getch()函数可以直接读取键盘的一个输入,不需要回车,刚好适合让程序停留。只需要在main()函数的return 0之前加一行:
int main(int argc, char **argv) { try { std::cout << expression(); } catch (std::exception &e) { std::cout << e.what(); } // 新增这一行,等待用户按键 _getch(); return 0; }
优点:代码改动最小,不需要额外处理输入缓冲区,Windows平台下用VS完全没问题;缺点:<conio.h>是非标准头文件,如果你以后要跨平台编译(比如Linux),这个方法就不行了。
方法2:标准C++的输入等待(跨平台友好)
如果你想写跨平台的代码,推荐用标准库的方法。不过要注意:用户输入表达式后,控制台里会留下一个换行符(按下回车的那个),直接用std::cin.get()会读取到这个换行符,程序还是会直接关闭。所以需要先清空输入缓冲区:
首先,你需要在代码顶部新增一个头文件:
#include <limits> // 用于std::numeric_limits
然后修改main():
int main(int argc, char **argv) { try { std::cout << expression(); } catch (std::exception &e) { std::cout << e.what(); } // 清空缓冲区里的所有内容,直到遇到换行符 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 等待用户输入任意字符 std::cin.get(); return 0; }
优点:完全符合标准C++,跨平台通用;缺点:需要多写两行代码,还要引入额外的头文件。
方法3:用Visual Studio的调试技巧(不用改代码)
如果你只是调试的时候想让窗口停留,根本不需要改代码!直接用Ctrl+F5(开始执行不调试)来运行程序,VS会自动在程序结束后显示“按任意键继续...”,窗口不会自动关闭。
而如果你用F5(启动调试)的话,调试结束后窗口还是会关闭,这时候可以在main()的return 0处打个断点,程序执行到断点就会暂停,你就能看到结果了。
不推荐的方法:system("pause")
网上很多人会推荐用system("pause"),它会显示“请按任意键继续...”,但这个方法依赖系统的pause命令,不是标准C++,在Linux等其他系统上无法运行,而且存在一定的安全风险(如果系统里的pause命令被恶意替换),所以不建议使用。
内容的提问来源于stack exchange,提问作者TheZedYasuo

