Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止Visual Studio C/C+上的控制台窗口关闭+;控制台应用程序_C_Visual Studio_Console - Fatal编程技术网

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

防止Visual Studio C/C+上的控制台窗口关闭+;控制台应用程序,c,visual-studio,console,C,Visual Studio,Console,这可能是一个令人尴尬的问题,因为答案无疑是显而易见的 我已经使用VisualStudio很多年了,但这是我第一次进行“控制台应用程序”开发 当我运行应用程序时,控制台窗口弹出,程序输出出现,然后当应用程序退出时窗口关闭 有没有办法在我检查输出之前保持打开状态,或者在窗口关闭后查看结果?如果您使用的是.NET,请在程序结束之前放置Console.ReadLine() 如果您在未调试的情况下运行(Ctrl+F5),它将等待,然后默认情况下,它会提示您按return关闭窗口。如果要使用调试器,应在最后

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

我已经使用VisualStudio很多年了,但这是我第一次进行“控制台应用程序”开发

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


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

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


如果您在未调试的情况下运行(Ctrl+F5),它将等待

,然后默认情况下,它会提示您按return关闭窗口。如果要使用调试器,应在最后一行设置断点。

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

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

return YOUR_MAIN_CODE;

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

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

在程序结束时使用
Console.ReadLine()
。这将保持窗口打开,直到您按Enter键。有关详细信息,请参见。

以下是C/C++的一种方法:

#include <stdlib.h>

#ifdef _WIN32
    #define WINPAUSE system("pause")
#endif
#包括
#ifdef_WIN32
#定义WINPAUSE系统(“暂停”)
#恩迪夫

将它放在程序的顶部,如果它在Windows系统上(
\ifdef\u WIN32
),则它将创建一个名为
WINPAUSE
的宏。每当您希望程序暂停时,请调用
WINPAUSE并使用DOS命令暂停程序。对于其他系统,如Unix/Linux,控制台无论如何都不应在程序退出时退出。

转到调试菜单->按StartWithoutDebugging

右键单击项目

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

SUBSYSTEM
选项中选择Console(/SUBSYSTEM:Console),或者您可以在文本字段中键入Console

现在试试看……它应该可以工作了。

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

(/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中,我们不需要这些技巧。

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

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

Console.WriteLine("Press any key to exit...");
Console.ReadKey();
这将等待您在代码结束后按键关闭终端窗口

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

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

  • 创建一个批处理文件。我调用了我的
    runthenpaise.bat
    ,内容如下:

    %1 %2 %3 %4 %5 %6 %7 %8 %9
    pause
    
    第一行将运行您提供的任何命令和最多八个参数。第二行是。。。暂停

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

  • 将“命令参数”更改为
    $(TargetPath)
    (或“命令”中的任何内容)
  • 将“Command”更改为
    runthenpaise.bat的完整路径
  • 点击OK
  • 现在,当您运行时,
    runthenpaise.bat
    将启动应用程序,在应用程序终止后,将暂停以查看控制台输出


    如果我知道如何加载符号,我会发布更新。我尝试了
    /Z7
    per,但没有成功。

    Visual Studio2015,使用导入。因为我讨厌 当代码示例没有提供所需的导入时

    #include <iostream>;
    
    int main()
    {
        getchar();
        return 0;
    }
    
    #包括;
    int main()
    {
    getchar();
    返回0;
    }
    
    更好的解决方案:

    atexit([] { system("PAUSE"); });
    
    在节目开始时

    优点:

    • 可以使用std::exit()
    • 可以从main返回多个值
    • 您可以在调试器下运行程序
    • IDE独立(+OS独立,如果使用
      cin.sync();cin.ignore();
      技巧而不是
      system(“暂停”);
    缺点:

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


    只需将以下内容作为最后一行代码:

    system("pause");
    
    或使用:

  • cin.get()
  • 系统(“暂停”)

  • 确保在
    main()
    函数的末尾和
    return
    语句之前设置它们中的任何一个。

    您也可以使用此选项

    #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;
    }
    
    #包括
    /*使用控制台暂停器运行此程序,或添加您自己的getch、system(“暂停”)或输入循环*/
    int main(){
    .
    .
    .
    getch();
    返回0;
    }
    
    在我的案例中,当我在VS 2017社区版上创建了一个空的C++项目时,我就经历了这个问题。您需要在配置属性下将子系统设置为“Console(/Subsystem:Console)”

  • 转到“查看”,然后选择“物业管理器”
  • 右键单击项目/解决方案并选择“属性”。这将打开一个测试属性页
  • 导航到链接器,然后选择“Sy”
    #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;
    }
    
    Tools->Options->Debugging->Automatically close the console