CLion编译的exe运行后控制台提前关闭,std::cin.get()无效求助
解决直接运行.exe程序输入后立即关闭的问题
原因分析
直接运行编译后的.exe时,输入数字按下回车后,输入缓冲区里会残留一个换行符\n。如果只加一行std::cin.get(),它会直接读取这个残留的换行符,程序随即执行return 0并退出,所以达不到停留效果。而CLion内置控制台会在程序结束后自动保持窗口打开,VS也有类似机制,所以不会出现这个问题。
可行解决方案
方案一:清空输入缓冲区后等待输入
在return 0;前添加以下代码:// 忽略输入缓冲区中剩余的所有字符,直到遇到换行符 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 等待用户输入任意字符后退出 std::cin.get();注意需要包含头文件
<limits>才能使用std::numeric_limits。方案二:使用系统命令暂停窗口
针对Windows平台,在return 0;前添加:system("pause");这个命令会直接在控制台显示“请按任意键继续...”,等待用户操作后才关闭窗口。缺点是依赖Windows系统,跨平台性差。
方案三:修改CLion的编译运行配置
如果想让直接生成的.exe运行时自动停留,可以在CLion的运行配置中,找到“Execution”选项卡,勾选“Run in external terminal”,这样编译后的程序会在外部控制台运行,且程序结束后不会立即关闭窗口(部分版本可能需要额外设置)。
内容的提问来源于stack exchange,提问作者XayTag
相关产品推荐
相关产品推荐

