如何保持在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)链接器选项,您可以启用,如下所示:

  1. 打开您的项目,然后转到解决scheme资源pipe理器。 如果你在K&R跟随我,你的“解决scheme”将是“你好”,下面有1个项目,还有“hello”。
  2. 右键单击“你好”(或者你的项目名称是什么)。
  3. 从上下文菜单中select“属性”。
  4. selectconfiguration属性>链接器>系统。
  5. 对于右侧窗格中的“子系统”属性,请单击右侧列中的下拉框。
  6. select“控制台(/ SUBSYSTEM:CONSOLE)”
  7. 单击应用,等待它完成任何操作,然后单击确定。 (如果“应用”是灰色的,select一些其他子系统选项,点击应用,然后返回并应用控制台选项。我的经验是,自己确定不起作用。

CTRL-F5和子系统提示一起工作; 他们不是单独的选项。

(由http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6提供的DJMorreTX提供);

在你的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(); 

在节目结束时。