防止在Visual Studio C / C ++控制台应用程序上closures控制台窗口

这可能是一个尴尬的问题,毫无疑问,答案是非常明显的。

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

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

有没有办法保持它打开,直到我已经检查输出,或在窗口closures后查看结果?

如果你在没有debugging的情况下运行(Ctrl + F5),那么默认情况下会提示你按回车closures窗口。 如果你想使用debugging器,你应该在最后一行放置一个断点。

右键点击你的项目

属性>configuration属性>链接器>系统

SubSystem选项中select控制台(/ SUBSYSTEM:CONSOLE)。

现在尝试一下…它应该工作

这是C / C ++的一个方法:

 #include <stdlib.h> #ifdef _WIN32 #define WINPAUSE system("pause") #endif 

把它放在程序的顶部,如果它在Windows系统上( #ifdef _WIN32 ),那么它将创build一个名为WINPAUSE的macros。 每当你想让程序暂停时,调用WINPAUSE; 它将使用DOS命令暂停程序。 对于其他系统如Unix / Linux,控制台不应该退出程序退出。

转到debugging菜单 – > StartWithoutDebugging

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

它将等待<ENTER>

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

(/ SUBSYSTEM:CONSOLE)没有为我的vs2013工作(我已经有了它)。

“没有debugging运行”不是一个选项,因为我不想在debugging和看到输出之间切换。

我结束了

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

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

这里有一个解决scheme,(1)不需要任何代码改变或断点,(2) 程序终止后暂停以便你可以看到打印的所有东西 。 它将在F5或Ctrl + F5之后暂停。 主要的缺点是在VS2013 Express(经testing),它不加载符号,所以debugging非常有限。

  1. 创build一个batch file。 我叫runthenpause.bat ,内容如下:

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

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

  2. 打开项目属性| configuration属性| debugging。

  3. 将“Command Arguments”更改为$(TargetPath) (或“Command”中的任何内容)。
  4. 将“Command”更改为runthenpause.bat的完整path。
  5. 点击确定。

现在,当你运行的时候, runthenpause.bat会启动你的应用程序,并且在你的应用程序终止之后,会暂停你看到控制台的输出。

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

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

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

这样窗口就不会closures,直到你inputavariables的数据。

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

只需按下CNTRL + F5在外部命令行窗口中打开它(Visual Studio不能控制它)。

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

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

一旦代码结束,等待您按下一个键closuresterminal窗口。

如果你想在多个地方做到这一点,把上面的代码放在一个方法(例如private void Pause() )中,并在程序到达可能结束时调用Pause()

Visual Studio 2015import 。 因为我讨厌代码示例不提供所需的import。

 #include <iostream>; int main() { getchar(); return 0; } 

一个更好的解决scheme:

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

在你的节目开始。

优点:

  • 可以使用std :: exit()
  • 可以有多个从主返回
  • 你可以在debugging器下运行你的程序
  • IDE独立(+操作系统独立,如果你使用cin.sync(); cin.ignore();技巧而不是system("pause");

缺点:

  • 必须修改代码
  • 不会在std :: terminate()上暂停
  • 在IDE /debugging器会话之外的程序中仍然会发生; 你可以使用下面的方法来防止这个:

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

使用console.readline 。 你正在写行,但没有阅读。