[英]C++ - Hold the console window open?
我的问题非常简单,但是我正在从C#转换到C ++,我想知道什么命令在C ++中打开控制台窗口?
我知道在C#中,最基本的方法是:
Console.ReadLine();
或者,如果您想让用户按任意键,则:
Console.ReadKey(true);
你是如何用C ++做到的? 我在这里问这个简单问题的唯一原因是,我无法在互联网上找到一个好的和明确的答案。
怎么样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下使用它。 另请注意,您可以使用以下命令启动程序,在Windows下以非编程方式实现此目的:
cmd /K consoleapp.exe
错误的方法
请勿使用以下任何方法来实现此目的:
system("PAUSE");
这将通过在程序中生成新的cmd.exe / command.com进程来执行windows命令'pause'。 由于pause命令是特定于窗口的,因此这是完全不必要的并且也是不可移植的。 不幸的是,我已经看过很多了。
getch();
这不是C / C ++标准库的一部分。 它只是一个编译器扩展,一些编译器不支持它。
如果您的问题是在Visual Studio中保留控制台窗口而不修改您的应用程序(c代码)并使用Ctrl + F5运行它(当运行Ctrl + F5时)但窗口仍在关闭,则主要提示是设置/ SUBSYSTEM :Visual Studio项目中的CONSOLE链接器选项。
正如DJMooreTX在http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6中所解释
1)打开项目,然后转到解决方案资源管理器。 如果您在K&R跟随我,您的“解决方案”将是“hello”,其中包含1个项目,也是“hello”的粗体。
右键单击“hello”(或任何项目名称)。
从上下文菜单中选择“属性”。
选择“配置属性>链接器>系统”。
对于右侧窗格中的“子系统”属性,请单击右侧列中的下拉框。
选择“控制台(/ SUBSYSTEM:CONSOLE)”
单击“应用”,等待它完成所做的任何操作,然后单击“确定”。 (如果“Apply”显示为灰色,请选择其他子系统选项,单击Apply,然后返回并应用控制台选项。我的经验是OK本身不起作用。)
现在做Boris的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;
}
您也可以稍微依靠IDE。 如果你使用“Start without debugging”命令运行程序(对我来说是Ctrl + F5),即使程序以“按任意键继续......”结束,控制台窗口也会保持打开状态。 信息。
当然,如果想使用“命中任意键”来保持程序运行(即保持线程处于活动状态),这将无法正常工作。 当你运行“with debugging”时它不起作用。 但是,您可以使用断点来保持窗口打开。
在Windows中,您可以使用_getch()
<conio.h>
头。
我在我的环境中使用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;
}
如果您创建控制台应用程序,控制台将保持打开状态,直到您关闭应用程序。
如果您已经创建了一个应用程序并且您不知道如何打开控制台,则可以在项目配置 - >链接器 - >系统中将子系统更改为控制台(/ Subsystem:Console)。
你在C#中完成的事情大致相同。 调用getch()
可能是最简单的。
首先要包括你应该使用的c ++函数
包括
<iostream.h>
而不是stdio .hand 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();
}
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.