提问



这可能是一个令人尴尬的问题,毫无疑问,答案显而易见。


我已经使用Visual Studio多年了,但这是我第一次完成任何控制台应用程序开发。


当我运行我的应用程序时,控制台窗口弹出,程序输出出现,然后窗口在应用程序退出时关闭。


有没有办法在检查输出之前保持打开状态,或者在窗口关闭后查看结果?

最佳参考


如果在没有调试的情况下运行(Ctrl + F5),则默认情况下会提示您按返回关闭窗口。如果要使用调试器,则应在最后一行放置断点。

其它参考1


右键单击您的项目



??属性>配置属性>链接器>系统



SubSystem选项中选择Console(/SUBSYSTEM:CONSOLE)。


现在尝试一下......它应该有效

其它参考2


这是C/C ++的一种方式:


#include 

#ifdef _WIN32
    #define WINPAUSE system("pause")
#endif


把它放在程序的顶部,如果它在Windows系统上[[#ifdef _WIN32),那么它将创建一个名为WINPAUSE的宏。每当您希望程序暂停时,请调用WINPAUSE;,它将使用DOS命令暂停程序。对于像Unix/Linux这样的其他系统,控制台不应该在程序退出时退出。

其它参考3


转到调试菜单 - > 按 StartWithoutDebugging

其它参考4


如果您正在使用.NET,请在程序结束前放置Console.ReadLine()


它将等待

其它参考5


尝试在main()返回之前调用getchar()

其它参考6


(/SUBSYSTEM:CONSOLE)对我的vs2013没用(我已经有了)。


run without debugging不是一个选项,因为我不想在调试和看到输出之间切换。


我结束了


int main() {
  ...
#if _DEBUG
  LOG_INFO("end, press key to close");
  getchar();
#endif // _DEBUG
  return 0;
}


在qtcreator pre 2.6中使用的解决方案。现在,当qt正在增长时,vs正在走向另一条路。我记得在vs2008中我们不需要这样的技巧。

其它参考7


这是一个解决方案,(1)不需要任何代码更改或断点,(2)在程序终止后暂停,以便您可以看到打印的所有。在F5或Ctrl + F5后它会暂停。主要的缺点是在VS2013 Express(经测试)上,它不会加载符号,因此调试非常有限。



  1. 创建批处理文件。我打电话给我runthenpause.bat,内容如下:


    %1 %2 %3 %4 %5 %6 %7 %8 %9
    pause
    


    第一行将运行您提供的任何命令以及最多八个参数。第二行将......暂停。

  2. 打开项目属性|配置属性|调试。

  3. 将命令参数更改为$(TargetPath)(或命令中的任何内容)。

  4. 将命令更改为runthenpause.bat的完整路径。

  5. 点击确定。



现在,当您运行时,runthenpause.bat将启动您的应用程序,并在您的应用程序终止后,将暂停您以查看控制台输出。


如果我弄清楚如何加载符号,我会发布更新。我试过/Z7,但没有成功。

其它参考8


您可以从命令提示符运行可执行文件。这样你就可以看到所有输出。或者,你可以这样做:


int a = 0;
scanf("%d",&a);

return YOUR_MAIN_CODE;


这样,在输入a变量的数据之前,窗口不会关闭。

其它参考9


添加|暂停在项目属性的调试部分下的命令参数框中。

其它参考10


只需按CNTRL + F5即可在外部命令行窗口中打开它(Visual Studio无法控制它)。


如果这不起作用,那么将以下内容添加到代码的末尾:


Console.WriteLine("Press any key to exit...");
Console.ReadKey();


这等待您在代码到达结束后按一个键关闭终端窗口。


如果要在多个位置执行此操作,请将上述代码放在方法中(例如private void Pause()),并在程序到达可能的末尾时调用Pause()

其它参考11


把它作为你的最后一行代码:


system("pause");

其它参考12


一个更好的解决方案:


atexit([] { system("PAUSE"); });


在你的程序的开头。


优点:



  • 可以使用std :: exit()

  • 可以从主
  • 获得多个回报
  • 您可以在调试器下运行程序

  • IDE独立(如果您使用cin.sync(); cin.ignore();技巧而不是system("pause");,则独立于操作系统)



缺点:



  • 必须修改代码

  • 在std :: terminate()
  • 上没有停顿
  • 仍会发生在IDE/调试器会话之外的程序中;您可以使用以下命令在Windows下阻止此操作:






extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
    if (IsDebuggerPresent())
        atexit([] {system("PAUSE"); });
    ...
}

其它参考13


使用:



  1. cin.get();



要么



  1. system("pause");



确保在main()函数结束时和return语句之前创建它们中的任何一个。

其它参考14


Visual Studio 2015 导入。因为我讨厌
当代码示例不提供所需的导入时。


#include ;

int main()
{
    getchar();
    return 0;
}

其它参考15


使用console.readline。你的是写作线但不是读它。