如何保持在Visual C ++中打开控制台窗口?
我从Visual C ++开始,我想知道如何保持控制台窗口。
例如,这将是一个典型的“hello world”应用程序:
int _tmain(int argc, _TCHAR* argv[]) { cout << "Hello World"; return 0; }
我错过了什么?
用Ctrl + F5而不是F5来启动项目。
控制台窗口将保持打开状态, Press any key to continue . . .
Press any key to continue . . .
程序退出后的消息。
请注意,这需要Console (/SUBSYSTEM:CONSOLE)
链接器选项,您可以启用,如下所示:
- 打开您的项目,然后转到解决scheme资源pipe理器。 如果你在K&R跟随我,你的“解决scheme”将是“你好”,下面有1个项目,还有“hello”。
- 右键单击“你好”(或者你的项目名称是什么)。
- 从上下文菜单中select“属性”。
- selectconfiguration属性>链接器>系统。
- 对于右侧窗格中的“子系统”属性,请单击右侧列中的下拉框。
- select“控制台(/ SUBSYSTEM:CONSOLE)”
- 单击应用,等待它完成任何操作,然后单击确定。 (如果“应用”是灰色的,select一些其他子系统选项,点击应用,然后返回并应用控制台选项。我的经验是,自己确定不起作用。
CTRL-F5和子系统提示一起工作; 他们不是单独的选项。
在你的return语句之前,标准的方法是cin.get()
。
int _tmain(int argc, _TCHAR* argv[]) { cout << "Hello World"; cin.get(); return 0; }
把一个断点放在return
线上。
你在debugging器中运行它,对吧?
另一个select是使用
#include <process.h> system("pause");
虽然这不是很便携,所以它只能在Windows上运行,但它会自动打印“按任意键继续…”。 为你。
对于生成文件项目,由于Visual Studio中的一个错误(目前至less在2012版之前 – 我还没有testing过2013),接受的解决scheme失败了。 这个bug 在这里详细介绍。
为了使程序在makefile项目终止后暂停,请执行以下步骤(对于2010 – 2012之外的版本,这可能会有所不同):
1)通过 – 编辑 :见下文。 /SUBSYSTEM:CONSOLE
连接器的/SUBSYSTEM:CONSOLE
。
2)在文本编辑器中打开项目文件(.vcxproj)。
3)在根<project>
标签内插入以下内容:
<ItemDefinitionGroup> <Link> <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup>
4)在您的解决scheme中重新加载项目。
5)不debugging运行程序(CTRL + F5)。
编辑:
根据我下面的评论,设置链接器选项/SUBSYSTEM:CONSOLE
实际上与makefile项目无关(如果使用MSVC以外的编译器,甚至不一定可能)。 所有重要的是,该设置被添加到.vcxproj文件,按照上面的步骤3。
你可以使用cin.get();
或者cin.ignore();
就在你的return语句之前,以避免closures控制台窗口。
在main()
的结束括号上放置一个断点。 即使有多个return
语句,它也会被触发。 唯一的缺点是调用exit()
不会被捕获。
如果你没有debugging,请按照Zoidberg的build议回答,并用Ctrl + F5而不是F5开始你的程序。
只需将一个断点添加到_tmain
方法的_tmain
括号中即可。 这是更简单的方法加上你不必添加代码来debugging。
只要在main的最后一个括号中放一个断点。
int main () { //...your code... return 0; } //<- breakpoint here
它适用于我,不需要运行没有debugging。 它也会在触发断点之前执行析构函数,所以你可以检查任何在这些析构函数上打印的消息。
cin.get()或system(“PAUSE”)。 我没听说你可以用return(0);
我包括#include <conio.h>
,然后添加getch();
就在return 0;
之前return 0;
线。 无论如何,这正是我在学校学到的东西。 上面提到的方法与我看到的完全不同。
有同样的问题。 我在return语句之前使用_getch()。 有用。
我的2分:
select1:在main()
的末尾添加一个断点
select2:在return 0;
之前添加此代码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
你可以把keep_window_open(); 这里回来之前就是一个例子
int main() { cout<<"hello world!\n"; keep_window_open (); return 0; }
(有些选项可能会用不同的名称来调用,我不使用英文版本)
我有同样的问题,当我创build项目选项“空项目”,创build项目为“Win32控制台应用程序”而不是“空项目”。 在popup的对话框中,按“继续”,之后可以勾选“空白项目”选项并按确认。 之后,CTRL + F5将打开一个不能自动closures的控制台。
我有同样的问题; 在我的应用程序中有多个exit()点,没有办法知道它到底在哪里,然后我发现这个:
atexit(system("pause"));
要么
atexit(cin.get());
这样,无论我们退出程序的哪个位置,它都会停止。
另一种select:
#ifdef _WIN32 #define MAINRET system("pause");return 0 #else #define MAINRET return 0 #endif
主要:
int main(int argc, char* argv[]) { MAINRET; }
最简单的方法来把一个
Console.ReadLine();
在节目结束时。