首页 文章

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

提问于
浏览
390

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

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

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

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

18 回答

  • 404

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

  • 7

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

  • 24

    右键单击您的项目

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

    SubSystem 选项中选择控制台(/ SUBSYSTEM:CONSOLE) .

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

  • 1

    这是C / C的一种方式:

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

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

  • -2

    转到调试菜单 - >按 StartWithoutDebugging

  • 176

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

    它将等待 <ENTER> .

  • 11

    (/ 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中我们不需要这样的技巧 .

  • 2

    这里's a solution that (1) doesn' t需要任何代码更改或断点,以及(2)程序终止后暂停,以便您可以看到打印的所有内容 . 在F5或Ctrl F5之后它会暂停 . 主要的缺点是VS2013 Express(经测试),它不加载符号,因此调试非常有限 .

    • 创建批处理文件 . 我打电话给我的 runthenpause.bat ,内容如下:
    %1 %2 %3 %4 %5 %6 %7 %8 %9
    pause
    

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

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

    • 将"Command Arguments"更改为 $(TargetPath) (或"Command"中的任何内容) .

    • 将"Command"更改为 runthenpause.bat 的完整路径 .

    • 点击确定 .

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

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

  • 42

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

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

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

  • 2

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

  • 2

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

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

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

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

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

  • 2

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

    system("pause");
    
  • -3

    一个更好的解决方案:

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

    在你的程序的开头 .

    优点:

    • 可以使用std :: exit()

    • 可以从main返回多个

    • 您可以在调试器下运行程序

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

    缺点:

    • 必须修改代码

    • 不会在std :: terminate()上暂停

    • 仍将在IDE /调试器会话之外的程序中发生;您可以在Windows下使用以下命令阻止此


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

    使用:

    • cin.get();

    要么

    • system("pause");

    确保在 main() 函数末尾和 return 语句之前生成其中任何一个 .

  • 18

    您也可以使用此选项

    #include <conio.h> 
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    int main() {
       .
       .
       .
       getch(); 
    
       return 0;
    }
    
  • 10

    就我而言,当我在VS 2017社区版上创建一个Empty C项目时,我体验到了这一点 . 您需要在“配置属性”下将子系统设置为“控制台(/ SUBSYSTEM:CONSOLE)” .

    • 转到"View"然后选择"Property Manager"

    • 右键单击项目/解决方案,然后选择"Property" . 这将打开一个Test属性页面

    • 导航到链接器,然后选择"System"

    • 点击"SubSystem",出现一个下拉菜单

    • 选择"Console (/SUBSYSTEM:CONSOLE)"

    • 申请并保存

    • 下次使用"CTRL +F5"运行代码时,应该看到输出 .

  • 0

    Visual Studio 2015 ,带 imports . 因为我讨厌代码示例时不提供所需的导入 .

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

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

相关问题