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