我开始使用Visual C ++,我想知道如何保留控制台窗口。
例如,这将是典型的“hello world”应用程序:
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
我错过的是什么?
答案 0 :(得分:377)
使用 Ctrl + F5 而不是 F5 启动项目。
程序退出后,控制台窗口将保持打开并显示Press any key to continue . . .
消息。
请注意,这需要Console (/SUBSYSTEM:CONSOLE)
链接器选项,您可以按如下方式启用它:
CTRL-F5和子系统提示一起工作;它们不是单独的选择。
(来自http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6的DJMorreTX提供)
答案 1 :(得分:40)
在您的退货声明之前,标准方式是cin.get()
。
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
cin.get();
return 0;
}
答案 2 :(得分:24)
在return
行放置一个断点。
你在调试器中运行它,对吗?
答案 3 :(得分:17)
另一种选择是使用
#include <process.h>
system("pause");
虽然这不是很便携,因为它只适用于Windows,但会自动打印
按任意键继续......
答案 4 :(得分:7)
对于makefile项目,由于Visual Studio中的错误(至少在2012版本之前存在 - 我还没有测试过2013年),接受的解决方案失败了。此错误详细here。
为了让程序在makefile项目终止后暂停控制台,请执行以下步骤(对于2010 - 2012以外的版本,这可能会有所不同):
1)将 - 编辑:见下文。/SUBSYSTEM:CONSOLE
传递给链接器。
2)在文本编辑器中打开项目文件(.vcxproj)。
3)在根<project>
标记内插入以下内容:
<ItemDefinitionGroup> <Link> <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup>
4)在解决方案中重新加载项目。
5)运行程序而不调试(CTRL + F5)。
修改强>
根据我在下面的评论,设置链接器选项/SUBSYSTEM:CONSOLE
实际上与makefile项目无关(如果您使用的是MSVC以外的编译器,则不一定可能)。重要的是该设置被添加到.vcxproj文件中,如上面的步骤3所示。
答案 5 :(得分:4)
您可以在return语句之前使用cin.get();
或cin.ignore();
,以避免关闭控制台窗口。
答案 6 :(得分:4)
在main的最后一个花括号上放一个断点。
int main () {
//...your code...
return 0;
} //<- breakpoint here
它适用于我,无需在没有调试的情况下运行。它还会在命中断点之前执行析构函数,这样您就可以检查在这些析构函数上打印的任何消息(如果有的话)。
答案 7 :(得分:3)
只需在您的_tmain
方法的结束括号中添加一个断点即可。这是更简单的方法,而且您无需添加代码即可进行调试。
答案 8 :(得分:2)
在main()
的结尾括号上放置一个断点。即使有多个return
语句,它也会被绊倒。唯一的缺点是不会发现对exit()
的调用。
如果您没有调试,请按照Zoidberg的回答中的建议,使用 Ctrl + F5 而不是 F5 启动您的程序。
答案 9 :(得分:2)
只需在代码末尾添加系统(&#34;暂停&#34;),然后像这样返回0
#include <stdlib.h>
int main()
{
//some code goes here
system("pause")
return 0;
}
答案 10 :(得分:1)
我包含#include <conio.h>
,然后在getch();
行之前添加return 0;
。这就是我在学校学到的东西。上面提到的方法与我看到的完全不同。
答案 11 :(得分:1)
有同样的问题。我在return语句之前使用_getch()
。它有效。
答案 12 :(得分:1)
cin.get()
或system("PAUSE")
。
我没有听说你可以使用return(0);
答案 13 :(得分:1)
我的2分:
选择1:在return 0;
选择2:在std::cout << "Press ENTER to continue..."; //So the User knows what to do
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
:
<iomanip>
添加{{1}}
答案 14 :(得分:1)
正如某些人已经指出的那样,Zoidbergs解决方案不附带调试器,这通常是您不想要的。
最好的imo选项是通过转到“工具”>“选项”>“调试”>“常规”,相应地配置VS(从VS 2017起)。在那里,您取消选中“调试停止时自动关闭控制台”(在最底部),您可能会选中该选项。
答案 15 :(得分:0)
(某些选项可能会被不同的名称调用。我不使用英文版本)
我遇到了同样的问题,当我用“空项目”选项创建项目时,创建项目为“Win32-console application”而不是“空项目”。在现在弹出的对话框中,按“继续”,之后可以选中“空项目”选项并按确认。之后,CTRL + F5将打开一个不会自动关闭的控制台。
答案 16 :(得分:0)
我有同样的问题;在我的应用程序中有多个exit()点,并且没有办法知道它出在哪里,然后我发现了这个:
atexit(system("pause"));
或
atexit(cin.get());
这样,无论我们在程序中退出,它都会停止。
答案 17 :(得分:0)
另一种选择:
#ifdef _WIN32
#define MAINRET system("pause");return 0
#else
#define MAINRET return 0
#endif
主要:
int main(int argc, char* argv[]) {
MAINRET;
}
答案 18 :(得分:0)
实际上,真正的解决方案是选择项目模板本身。 您必须在较旧的VS中选择Win32控制台应用程序,或先填写项目名称,然后双击Windows桌面向导,然后选择Win32控制台应用程序。然后在此处选择空项目。然后,这允许原始提问者真正想要的,而无需添加额外的停止点和保持代码。 我也遇到了这个问题。答案也在MSDN网站上。
答案 19 :(得分:0)
这是一种保持命令窗口打开的方法,无论执行如何停止而不修改任何代码:
在Visual Studio中,打开项目属性页 - &gt;的调试强>
对于命令,请输入$(ComSpec)
对于命令参数,请输入/k $(TargetPath)
。将任何参数附加到您自己的应用程序。
现在 F5 或 Ctrl-F5 在新窗口中执行 Windows / System32 / cmd.exe , / k < / strong>确保在执行完成后命令提示符保持打开状态。
缺点是执行不会在断点处停止。
答案 20 :(得分:0)
int main()
{
//...
getchar();
return 0;
}
答案 21 :(得分:-1)
int main()
{
cout<<"hello world!\n";
keep_window_open ();
return 0;
}