C ++ – 保持控制台窗口打开?

我的问题是超级简单的,但我正在从C#转换到C ++,我想知道什么命令持有在C + +中打开控制台窗口?

我在C#中知道,最基本的方法是:

Console.ReadLine(); 

或者如果你想让用户按任何键,它的:

 Console.ReadKey(true); 

你如何在C ++中做到这一点? 我在这里问这个简单的问题的唯一原因是,我没有在互联网上find一个好的,清楚的答案。

怎么样std::cin.get();

另外,如果您使用的是Visual Studio,则可以在不进行调试的情况下运行(默认为CTRL-F5),并且不会在最后关闭控制台。 如果你在调试时运行它,你总是可以在main()大括号处加上一个断点。

正确的方式

 cin.get(); 

cin.get()是C ++兼容的,可移植的。 它将从标准输入(stdin)中检索下一个字符。 用户可以按回车,然后程序将继续执行,或终止在我们的情况。

微软拿走

Microsoft有一个知识库文章标题为防止控制台窗口消失 。 它描述了如何仅在必要时暂停执行,即只有当用户通过从资源管理器执行程序产生新的控制台窗口。 代码是我在这里转载的C:

 #include <windows.h> #include <stdio.h> #include <conio.h> CONSOLE_SCREEN_BUFFER_INFO csbi; HANDLE hStdOutput; BOOL bUsePause; void main(void) { hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); if (!GetConsoleScreenBufferInfo(hStdOutput, &csbi)) { printf("GetConsoleScreenBufferInfo failed: %d\n", GetLastError()); return; } // if cursor position is (0,0) then use pause bUsePause = ((!csbi.dwCursorPosition.X) && (!csbi.dwCursorPosition.Y)); printf("Interesting information to read.\n"); printf("More interesting information to read.\n"); // only pause if running in separate console window. if (bUsePause) { int ch; printf("\n\tPress any key to exit...\n"); ch = getch(); } } 

我自己也用过这个,当然这只是在窗户下做的。 注意你也可以通过这个命令启动你的程序来在windows下非编程的实现这个功能:

 cmd /K consoleapp.exe 

错误的方法

不要使用下面的任何一个来达到这个目的:

 system("PAUSE"); 

这将通过在程序中产生一个新的cmd.exe / command.com进程来执行windows命令“暂停”。 这是完全不必要的,也是不可移植的,因为暂停命令是特定于Windows的。 不幸的是我已经看到了很多。

 getch(); 

这不是C / C ++标准库的一部分。 这只是一个编译器扩展,一些编译器不会支持它。

如果您的问题是在不修改应用程序(c代码)的情况下在Visual Studio中保留控制台窗口,并且正在使用Ctrl + F5(运行Ctrl + F5)运行它,但是窗口仍然关闭主要提示是将/ SUBSYSTEM :您的Visual Studio项目中的CONSOLE链接器选项。

正如DJMooreTX在http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6中所解释&#x7684;

1)打开你的项目,并进入解决方案资源管理器。 如果你在K&R跟随我,你的“解决方案”将是“你好”,下面有1个项目,还有“hello”。

  1. 右键单击“你好”(或者你的项目名称是什么)。

  2. 从上下文菜单中选择“属性”。

  3. 选择配置属性>链接器>系统。

  4. 对于右侧窗格中的“子系统”属性,请单击右侧列中的下拉框。

  5. 选择“控制台(/ SUBSYSTEM:CONSOLE)”

  6. 单击应用,等待它完成任何操作,然后单击确定。 (如果“应用”是灰色的,选择一些其他子系统选项,点击应用,然后返回并应用控制台选项。我的经验是,自己确定不起作用。

现在做鲍里斯的CTRL-F5,等待你的程序编译和链接,找到桌面上的所有其他垃圾下的控制台窗口,并阅读你的程序的输出,其次是心爱的“按任意键继续…. “提示。

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

更合适的方法是使用std::cin.ignore

 #include <iostream> void Pause() { std::cout << "Press Enter to continue..."; std::cout.flush(); std::cin.ignore(10000, '\n'); return; } 

在Windows中,你可以使用_getch()

 <conio.h> 

头。

你也可以靠在IDE上一点。 如果使用“Start without debugging”命令(Ctrl + F5)运行程序,即使在程序结束之后,控制台窗口仍将保持打开状态,并按“任意键继续…”。 信息。

当然,如果要使用“按任意键”来保持程序运行(即保持线程活着),这是行不通的。 当你运行“调试”时,它不起作用。 但是,你可以使用断点来保持窗口打开。

如果您创建控制台应用程序,控制台将保持打开状态,直到您关闭应用程序。

如果您已经创建了一个应用程序,而您不知道如何打开控制台,则可以在项目配置 – >连接器 – >系统中将子系统更改为控制台(/子系统:控制台)。

与C#中大致相同的东西。 调用getch()可能是最简单的。

我在我的环境中使用std::getwchar()与mingw32 – gcc-4.6.2编译器,下面是一个示例代码。

 #include <iostream> #include "Arithmetics.h" using namespace std; int main() { ARITHMETICS_H::testPriorities(); cout << "Press any key to exit." << endl; getwchar(); return 0; } 

正如托马斯所说,cin不理会是一个好方法。 要始终等待用户按Enter(即使使用退出),注册一个函数atexit:

 #include <iostream> void pause() { ::std::cout<<"\nPress ENTER to exit."; ::std::cin.sync(); if(::std::cin.get()!='\n') ::std::cin.ignore(0xFFFFFFFF,'\n'); } int main() { atexit(pause); // whatever return 0; } 

嘿首先包括你应该使用的c ++函数

包括<iostream.h>而不是stdio .h

 and to hold the output screen there is a simple command getch(); here, is an example: 
  #include<iostream.h> #include<conio.h> void main() \\or int main(); if you want { cout<<"c# is more advanced than c++"; getch(); } 

谢谢