如何阻止C++控制台应用程序立即退出?

Ada*_*m P 185 c++ console c++-faq exit terminate

最近,我一直在尝试从这个网站学习C++ .不幸的是,每当我尝试运行其中一个代码示例时,我会看到该程序打开大约半秒然后立即关闭.有没有办法阻止程序立即关闭,以便我可以看到我努力的成果?

nab*_*lke 135

如果您正在使用Visual Studio,并且您正在从IDE启动控制台应用程序:

CTRL-F5(无需调试启动)将启动应用程序并保持控制台窗口打开,直到您按任意键.

  • 完善!我已经被这长期困扰了,这很有效. (2认同)

Jam*_*lis 118

编辑: 正如Charles Bailey在下面的评论中正确指出的那样,如果有缓冲的字符,这将无法工作stdin,并且实际上没有好办法解决这个问题.如果您使用附带的调试器运行,John Dibling建议的解决方案可能是解决您问题的最简洁的解决方案.

也就是说,我会把它留在这里,也许别人会觉得它很有用.在开发过程中编写测试时,我已经习惯了很多东西.


在你的main功能结束时,你可以打电话std::getchar();

这将获得单个字符stdin,从而为您提供"按任意键继续"的行为(如果您实际上想要"按任意键"消息,则必须自己打印一个).

你需要#include <cstdio>getchar.

  • `getchar`不能解决问题 - 或者至少在有限的情况下解决问题.它从`stdin`读取一个char,但是如果已经有从stdin缓冲的字符,程序将继续进行而不管你是否打印提示. (14认同)
  • 请不要这样做.:(这不是你的程序的功能的一部分来做到这一点. (5认同)

cod*_*ict 102

James的解决方案适用于所有平台.

或者,Windows您也可以在从main函数返回之前添加以下内容:

  system("pause");
Run Code Online (Sandbox Code Playgroud)

这将运行pause等待直到您按下一个键并且还显示一条好消息的命令Press any key to continue . . .

  • @Dave Van den Eynde:它也很常见,是DevCPP中样板代码的标准配置.+1 (4认同)
  • 另一方面,@ Dave确实清楚地表明这只是一个例子,而std:getch可能会被意外遗留在实际代码中. (4认同)
  • 这听起来像是Rube Goldberg的解决方案变体. (2认同)
  • 对于Windows用户来说,这是一个非常有效的解决方案.虽然不理想,但确实有效 (2认同)

小智 80

如果您正在使用Microsoft的Visual C++ 2010 Express并遇到问题,CTRL + F5无法在程序终止后保持控制台打开,请查看此MSDN线程.

可能你的IDE设置为在CTRL + F5运行后关闭控制台; 事实上,Visual C++ 2010中的"空项目"默认关闭控制台.要更改此设置,请按照Microsoft主持人的建议:

请右键单击您的项目名称并转到属性页面,请展开配置属性 - >链接器 - >系统,请在子系统下拉列表中选择控制台(/ SUBSYSTEM:CONSOLE).因为,默认情况下,Empty项目不指定它.

  • 这完全是最好的答案,其他答案都是黑客. (3认同)
  • @ Mr.Underhill如果您在没有调试器的情况下启动(Ctrl + F5),这将*仅*工作. (3认同)

Joh*_*ing 18

我通常只是在main()关闭大括号上放一个断点.当通过断点将触及的任何方式到达程序的末尾时,您可以ALT-Tab到控制台窗口以查看输出.


Amo*_*mos 14

为什么不从控制台运行程序,即如果您使用的是Windows,则从cmd.exe运行程序.这样,程序结束后窗口保持打开状态.

[编辑]:当我使用KDevelop4时,在IDE底部的选项卡中运行了一个完全成熟的Bash(Linux CLI)实例.这是我在这种情况下使用的.

  • @nobugz:如果从"空项目"而不是"Win32控制台应用程序"开始,则不在项目属性中显式设置子系统.如果在项目中定义`main`,则链接器默认使用CONSOLE子系统.在调试或运行时,您将获得一个控制台窗口.但是,除非在项目属性中明确指定CONSOLE作为子系统,否则Visual Studio将不会保持控制台窗口处于打开状态.我总是从一个空项目开始,我很少更改单个项目属性,所以我从未见过控制台窗口.对困惑感到抱歉 (4认同)
  • 因为如果您使用的是IDE,通常不会使用控制台.你推开,程序运行,就是这样. (3认同)
  • 任何有能力的IDE都会在应用程序终止时将控制台保留在屏幕上 - 例如Code :: Blocks就是这样做的. (3认同)
  • @nobugz:我明白了.要使窗口保持不变,您必须在链接器命令行上具有/ SUBSYSTEM:CONSOLE.文档说如果定义了`main`,这是默认值,但是如果我没有在命令行上显式设置它,VS会在应用程序退出时终止窗口.*叹* (3认同)
  • @James:首先需要获得一个控制台窗口.这反过来需要main()而不是WinMain(),而不是相反.我有点失落...... (2认同)

小智 9

在代码结束之前,插入以下行:

system("pause");
Run Code Online (Sandbox Code Playgroud)

这将保持控制台,直到你按下一个键.

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;
    cout << "Please enter your first name followed by a newline\n";
    cin >> s;
    cout << "Hello, " << s << '\n';
    system("pause"); // <----------------------------------
    return 0; // This return statement isn't necessary
}
Run Code Online (Sandbox Code Playgroud)


小智 8

拨打cin.get();2次电话:

    //...
    cin.get();
    cin.get();
    return 0
}
Run Code Online (Sandbox Code Playgroud)

  • 但为什么两次? (6认同)