这可能是一个令人尴尬的问题,毫无疑问,答案显而易见。
我已经使用Visual Studio多年了,但这是我第一次完成任何“控制台应用程序”开发。
当我运行我的应用程序时,弹出控制台窗口,出现程序输出,然后在应用程序退出时窗口关闭。
在我检查输出之前有没有办法让它保持打开状态,或者在窗口关闭后查看结果?
答案 0 :(得分:438)
如果您在没有调试的情况下运行(Ctrl + F5),则默认情况下会提示您按返回关闭窗口。如果要使用调试器,则应在最后一行放置断点。
答案 1 :(得分:207)
右键点击您的项目
属性>配置属性>链接器>系统
在SubSystem
选项中选择控制台(/ SUBSYSTEM:CONSOLE),或者您只需在文字字段中输入控制台即可!
现在尝试一下......它应该可行
答案 2 :(得分:45)
这是C / C ++的一种方式:
#include <stdlib.h>
#ifdef _WIN32
#define WINPAUSE system("pause")
#endif
将它放在程序的顶部,如果它在Windows系统(#ifdef _WIN32
)上,那么它将创建一个名为WINPAUSE
的宏。只要您希望程序暂停,请调用WINPAUSE;
,它将使用DOS命令暂停程序。对于像Unix / Linux这样的其他系统,控制台不应该在程序退出时退出。
答案 3 :(得分:26)
转到调试菜单 - &gt; 按 StartWithoutDebugging
答案 4 :(得分:22)
如果您使用的是.NET,请在程序结束前放置Console.ReadLine()
。
它将等待<ENTER>
。
答案 5 :(得分:12)
(/ SUBSYSTEM:CONSOLE)对我的vs2013不起作用(我已经有了)。
“无需调试运行”不是一个选项,因为我不想在调试和看到输出之间切换。
我以
结束int main() {
...
#if _DEBUG
LOG_INFO("end, press key to close");
getchar();
#endif // _DEBUG
return 0;
}
qtcreator pre 2.6中使用的解决方案。现在,当qt正在增长时,vs正在走向另一条路。我记得在vs2008中我们不需要这样的技巧。
答案 6 :(得分:12)
尝试在getchar()
返回之前调用main()
。
答案 7 :(得分:7)
这是一个解决方案,(1)不需要任何代码更改或断点,以及(2)在程序终止后暂停,以便您可以看到所有内容< / em>已打印。它将在F5或Ctrl + F5之后暂停。主要的缺点是在VS2013 Express上(经过测试),它不会加载符号,因此调试非常有限。
创建批处理文件。我打电话给我的runthenpause.bat
,内容如下:
%1 %2 %3 %4 %5 %6 %7 %8 %9
pause
第一行将运行您提供的任何命令以及最多八个参数。第二行将......暂停。
打开项目属性|配置属性|调试。
$(TargetPath)
(或其他任何内容&#34; Command&#34;)。runthenpause.bat
的完整路径。现在,当您运行时,runthenpause.bat
将启动您的应用程序,并且在您的应用程序终止后,将暂停您以查看控制台输出。
如果我弄清楚如何加载符号,我会发布更新。我按this尝试/Z7
但未成功。
答案 8 :(得分:6)
将其作为最后一行代码:
system("pause");
答案 9 :(得分:3)
添加“|暂停“在项目属性的调试部分下的命令参数框中。
答案 10 :(得分:3)
只需按CNTRL + F5即可在外部命令行窗口中打开它(Visual Studio无法控制它)。
如果这不起作用,请将以下内容添加到代码的末尾:
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
一旦代码到达结束,等待您按一个键关闭终端窗口。
如果您想在多个地方执行此操作,请将上述代码放入方法(例如private void Pause()
),并在程序可能结束时调用Pause()
。
答案 11 :(得分:3)
您可以从命令提示符运行可执行文件。这样你就可以看到所有输出。或者,你可以这样做:
int a = 0;
scanf("%d",&a);
return YOUR_MAIN_CODE;
这样,在输入a
变量的数据之前,窗口不会关闭。
答案 12 :(得分:3)
从Visual Studio 2017(15.9.4)开始,有一个选项:
Tools->Options->Debugging->Automatically close the console
来自Visual Studio documentation的相应片段:
在调试停止时自动关闭控制台:
告诉Visual Studio在调试会话结束时关闭控制台。
答案 13 :(得分:2)
一个更好的解决方案:
atexit([] { system("PAUSE"); });
在您的计划开始时。
优点:
cin.sync(); cin.ignore();
技巧而不是system("pause");
,则独立于操作系统)缺点:
extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
if (IsDebuggerPresent())
atexit([] {system("PAUSE"); });
...
}
答案 14 :(得分:2)
使用:
cin.get();
或
system("pause");
确保在main()
函数末尾和return
语句之前创建其中任何一个。
答案 15 :(得分:2)
就我而言,我在VS 2017社区版上创建了一个Empty C ++项目时就遇到了这种情况。您将需要在“配置属性”下将“子系统”设置为“控制台(/ SUBSYSTEM:CONSOLE)”。
答案 16 :(得分:1)
您也可以使用此选项
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^admin\/?(.*) /backend/web/$1
RewriteCond %{REQUEST_URI} !^/(frontend/web|backend/web|admin)
RewriteRule (.*) /frontend/web/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /frontend/web/index.php
RewriteCond %{REQUEST_URI} ^/backend/web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /backend/web/index.php
答案 17 :(得分:0)
答案 18 :(得分:0)
当前,对于在WSL2中运行的应用程序无法做到这一点。但是,有两种解决方法:
调试窗口保留关闭的WSL Shell窗口的内容。
如果您的应用程序返回非零返回码,则该窗口保持打开状态,因此您可以在调试版本中返回非零。
答案 19 :(得分:0)
有时不改变您的设置或代码的简单黑客可以是:
用 F9 设置断点,然后用 F5 执行调试。
答案 20 :(得分:-1)
Visual Studio 2015 ,导入。因为我讨厌 当代码示例没有提供所需的导入时。
#include <iostream>;
int main()
{
getchar();
return 0;
}
答案 21 :(得分:-2)
使用console.readline
。你的是在写这条线而不是读它。