代码之家  ›  专栏  ›  技术社区  ›  Martin

在VisualStudioC/C++控制台应用程序中防止控制台窗口关闭

  •  413
  • Martin  · 技术社区  · 15 年前

    这可能是一个令人难堪的问题,因为毫无疑问,答案是显而易见的。

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

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

    有没有办法让它一直打开直到我检查了输出,或者在窗口关闭后查看结果?

    19 回复  |  直到 6 年前
        1
  •  422
  •   Tom    15 年前

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

        2
  •  189
  •   Arshdeep Singh    6 年前

    右键单击项目

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

    选择 控制台(/subsystem:console) 在里面 SubSystem 或者你只需输入 慰问 在文本字段中!

    现在试试……应该管用

        3
  •  43
  •   carefulnow1 Ninju Bohra    8 年前

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

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

    把它放在程序顶部,如果它在Windows系统上( #ifdef _WIN32 ,然后它将创建一个名为 WINPAUSE . 每当您想暂停程序时,请致电 WINPAUSE; 它将使用DOS命令暂停程序。对于其他系统,如unix/linux,不管怎样,控制台都不应该在程序退出时退出。

        4
  •  25
  •   pashaplus    12 年前

    转到“调试”菜单-> 压力 开始时不要超过预算

        5
  •  20
  •   Cheeso    15 年前

    如果您使用.NET,请 Console.ReadLine() 在节目结束前。

    它会等待 <ENTER> .

        6
  •  11
  •   Alex Shesterov    11 年前

    试着打电话 getchar() 就在之前 main() 返回。

        7
  •  10
  •   Fantastory    9 年前

    (/subsystem:console)不适用于我的VS2013(我已经拥有它)。

    “无调试运行”不是一个选项,因为我不想在调试和查看输出之间切换。

    我结束了

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

    qtcreator 2.6之前版本中使用的解决方案。现在,随着qt的增长,vs正朝另一个方向发展。我记得,在VS2008中,我们不需要这样的技巧。

        8
  •  7
  •   Community kfsone    7 年前

    这里有一个解决方案:(1)不需要任何代码更改或断点,(2)暂停 程序终止后 这样你就能看到 一切 那是印刷品。它将在F5或Ctrl+F5之后暂停。主要的缺点是,在VS2013 Express(经过测试)上,它不加载符号,因此调试非常受限制。

    1. 创建批处理文件。我叫我的 runthenpause.bat ,内容如下:

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

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

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

    3. 将“命令参数”更改为 $(TargetPath) (或“命令”中的任何内容)。
    4. 将“command”更改为完整路径 运行暂停.bat .
    5. 打好了。

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

    如果我知道如何加载符号,我会发布一个更新。我试过 /Z7 this 但没有成功。

        9
  •  5
  •   RafaelJan    7 年前

    作为最后一行代码:

    system("pause");
    
        10
  •  2
  •   Geo    15 年前

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

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

    这样窗口就不会关闭,直到您输入 a 变量。

        11
  •  2
  •   theambient    15 年前

    在项目属性的调试部分的命令参数框中添加__pause_157;。

        12
  •  2
  •   carefulnow1 Ninju Bohra    8 年前

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

    如果这不起作用,请在代码末尾添加以下内容:

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

    当代码到达末尾时,等待您按键关闭终端窗口。

    如果要在多个地方执行此操作,请将上述代码放入一个方法(例如 private void Pause() 和呼叫 Pause() 每当一个程序到达一个可能的终点。

        13
  •  2
  •   AAEM Niklas B.    6 年前

    要么使用:

    1. cin.get();

    1. system("pause");

    确保在 main() 功能和之前 return 语句。

        14
  •  1
  •   Jon Cage    7 年前

    更好的解决方案:

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

    在程序开始时。

    赞成的意见:

    • 可以使用std::exit()。
    • 可以有多个主返回
    • 可以在调试器下运行程序
    • 独立于IDE(+OS如果使用 cin.sync(); cin.ignore(); 把戏而不是 system("pause"); )

    欺骗:

    • 必须修改代码
    • 不会在std::terminate()上暂停
    • 仍将在您的程序中的IDE/Debugger会话之外发生;您可以在Windows下使用以下方法来防止这种情况:

    extern "C" int __stdcall IsDebuggerPresent(void);
    int main(int argc, char** argv) {
        if (IsDebuggerPresent())
            atexit([] {system("PAUSE"); });
        ...
    }
    
        15
  •  1
  •   chronoxor    6 年前

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

    Tools->Options->Debugging->Automatically close the console
    

    对应的片段来自 Visual Studio documentation :

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

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

        16
  •  0
  •   Vladimir Salguero    6 年前

    您也可以使用此选项

    #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;
    }
    
        17
  •  0
  •   0xsteve    6 年前

    在我的例子中,当我在VS 2017社区版上创建了一个空的C++项目时,我经历了这一点。您需要在配置属性下将子系统设置为“console”(/subsystem:console)。

    1. 转到“视图”,然后选择“属性管理器”
    2. 右键单击项目/解决方案并选择“属性”。这将打开一个测试属性页
    3. 导航到链接器,然后选择“系统”
    4. 点击“子系统”,出现一个下拉列表
    5. 选择“console”(/subsystem:console)
    6. 应用与保存
    7. 下次用“ctrl+f5”运行代码时,应该看到输出。
        18
  •  -2
  •   KANJICODER    7 年前

    Visual Studio 二千零一十五 进口 . 因为我讨厌 当代码示例不提供所需的导入时。

    #include <iostream>;
    
    int main()
    {
        getchar();
        return 0;
    }
    
        19
  •  -3
  •   taskinoor    13 年前

    使用 console.readline . 你在写这句话,但没有读。