我是从Visual C ++开始的,我想知道如何保留控制台窗口。
例如,这将是一个典型的“ hello world”应用程序:
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
我想念的是哪一行?
我是从Visual C ++开始的,我想知道如何保留控制台窗口。
例如,这将是一个典型的“ hello world”应用程序:
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
我想念的是哪一行?
Answers:
使用Ctrl+F5而不是来启动项目F5。
Press any key to continue . . .
程序退出后,控制台窗口现在将保持打开状态并显示消息。
请注意,这需要Console (/SUBSYSTEM:CONSOLE)
链接器选项,您可以按以下方式启用它:
CTRL-F5和子系统提示可以协同工作;它们不是单独的选项。
(由DJMorreTX提供,网址为http://social.msdn.microsoft.com/Forums/zh-CN/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6)
cin.get(),getchar(), system("pause")
或任何其他垃圾来更改代码。改变这项工作。
system("pause");
在代码末尾添加即可。这很有意义并且可以正常工作。
标准方法是cin.get()
在您的return语句之前。
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
cin.get();
return 0;
}
_tmain
。我会再给-1投票,cin.get()
而不是为F5放置断点或使用Ctrl F5。但是我只能选一位。
_tmain
?这是编写针对控制台子系统的Windows应用程序的标准方法。偏离该标准将是一种不良做法。显然,这里没有人在谈论可移植代码。这个问题说是Visual C ++,_tmain
是示例代码中出现的签名。现在该放弃这种宗教了。Windows默认情况下是“非标准的”,并且有充分的理由遵循其标准。
_tmain
是因为它完全是不必要的非标准(国际C ++标准要求使用纯格式main
),并且因为它使用了Microsoft的T
宏方案,因此不需要复杂和繁琐的语言即可支持Windows 9x。如果您认为偏离标准是不好的做法,那么绝对不要使用tmain
。tmain
除了拖钓,或者对于专业人员而言,没有充分的理由来显示自己的全部能力。
另一种选择是使用
#include <process.h>
system("pause");
尽管这不是很可移植,因为它只能在Windows上运行,但是会自动打印
按任意键继续...
system
在中声明<stdlib.h>
。
对于makefile项目,由于Visual Studio中的错误(至少在2012版之前才存在-我尚未测试2013年),导致接受的解决方案失败。此错误在这里详细说明。
为了使程序在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,则即使可能也不可能)。重要的是,按照上述步骤3,将设置添加到.vcxproj文件。
/SUBSYSTEM:CONSOLE
给链接器实际上是无关紧要的-步骤3至关重要。请记住,我的答案与makefile项目有关-在makefile项目中,IDE无法知道要传递给链接器的内容(您甚至可能没有使用带有/SUBSYSTEM:CONSOLE
选项的编译器),而这就是项目本身,它会跟踪它是否打算成为控制台程序。我将相应地编辑我的答案。
只需在main的最后一个大括号上放置一个断点即可。
int main () {
//...your code...
return 0;
} //<- breakpoint here
它对我有用,无需调试即可运行。它还在达到断点之前执行析构函数,因此您可以检查在这些析构函数上显示的任何消息。
我的2美分:
选择1:在结尾处添加断点 main()
选择2:在以下代码之前添加此代码return 0;
:
std::cout << "Press ENTER to continue..."; //So the User knows what to do
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
您需要包括<iomanip>
用于std::numeric_limits
cin.get()
或system("PAUSE")
。我没听说你可以用return(0);
我包括#include <conio.h>
然后在行getch();
之前添加return 0;
。无论如何,这就是我在学校学到的。我在这里提到的上述方法有很大的不同。
有同样的问题。我_getch()
在return语句之前使用 。有用。
我有同样的问题; 在我的应用程序中,有多个exit()点,无法知道确切的退出位置,于是我发现了这一点:
atexit(system("pause"));
要么
atexit(cin.get());
这样,无论我们在程序中的何处退出,它都将停止。
atexit
。atexit
需要一个函数指针,而不是整数。
你可以把keep_window_open(); 返回这里之前就是一个例子
int main()
{
cout<<"hello world!\n";
keep_window_open ();
return 0;
}