防止控制台窗口关闭Visual Studio C/C++控制台应用程序

Mar*_*tin 447 c console visual-studio

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

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

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

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

Tom*_*Tom 449

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

  • 如果您有一个C++应用程序并且Run Without Debugging并且控制台窗口仍然关闭,则需要记住在Configuration Properties/Linker/System下将子系统显式设置为Console.如果您从空项目开始,这会使子系统未设置,则会发生这种情况. (265认同)
  • 正确的答案是@TrevorRobinson的答案:如果您无法找到配置属性的位置,那么这是扩展版本:在Visual Studio>属性>配置属性>链接器>系统中右键单击您的项目,将子系统更改为"安慰" (40认同)
  • 我正在开发VS社区2017.`ctrl + f5`无法正常工作,当我右键单击项目时没有`属性',同时`扳手图标'显示为灰色. (9认同)
  • 对我不起作用:(控制台窗口立即打开并关闭,但日志暂停并等待另外按下F5 (4认同)
  • 如果您在"工具 - >自定义..."对话框中进行操作,也可以将"启动无调试"按钮添加到所需的任何工具栏/菜单中. (2认同)
  • 特雷弗罗宾逊是对的.如果你启动一个空白项目和C++项目.您需要转到View-> Property Manager-> Property(扳手图标) - > Config.属性 - >链接器 - >系统 - >子系统 - >在弹出的下拉菜单中,选择控制台. (2认同)

小智 220

右键单击您的项目

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

在选项中选择控制台(/ SUBSYSTEM:CONSOLE),SubSystem或者只需在文本字段中键入Console!

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

  • @MichaelCalvin设置完之后你必须用Ctrl + F5运行,这就是踢球者. (8认同)

小智 45

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

#include <stdlib.h>

#ifdef _WIN32
    #define WINPAUSE system("pause")
#endif
Run Code Online (Sandbox Code Playgroud)

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

  • @wmac您必须包含windows.h标头 (2认同)

pas*_*lus 29

转到调试菜单 - > StartWithoutDebugging


Che*_*eso 25

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

它会等待<ENTER>.

  • -1,修改代码以解决IDE问题 (46认同)
  • +1 - 或者只是等待任何键的`Console.ReadKey()`. (9认同)
  • 然后你的代码很可能在它到达那个点之前退出. (4认同)

Mag*_*usu 14

尝试getchar()main()返回前调用.


fan*_*ory 12

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

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

我结束了

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

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


chr*_*xor 11

从Visual Studio 2017(15.9.4)开始,有一个选项:

Tools->Options->Debugging->Automatically close the console
Run Code Online (Sandbox Code Playgroud)

Visual Studio文档中的相应片段:

调试停止时自动关闭控制台:

告诉Visual Studio在调试会话结束时关闭控制台。

  • 我刚刚在 VS2017 和 VS2019 中测试了这一点。它需要将子系统设置为 CONSOLE 并关闭此选项。拥有其中之一或两者都不会自动关闭窗口。 (6认同)
  • 如何更改 Makefile 项目的子系统? (2认同)

cxw*_*cxw 7

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

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

    %1 %2 %3 %4 %5 %6 %7 %8 %9
    pause
    
    Run Code Online (Sandbox Code Playgroud)

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

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

  3. 将"命令参数"更改为$(TargetPath)(或"命令"中的任何内容).
  4. 将"命令"更改为完整路径runthenpause.bat.
  5. 点击OK.

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

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

  • 这仍然不支持调试,但至少它解决了无法看到输出(例如 VLD)的问题,与**所有**其他答案相比。 (2认同)

Ref*_*Jan 6

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

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