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

Ale*_*lex 37 c++ windows console

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

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

Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

或者,如果您想让用户按任意键,则:

Console.ReadKey(true);
Run Code Online (Sandbox Code Playgroud)

你是如何用C++做到的?我在这里问这个简单问题的唯一原因是,我无法在互联网上找到一个好的和明确的答案.

Cog*_*eel 65

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

此外,如果您使用的是Visual Studio,则无需调试即可运行(默认情况下为CTRL-F5),并且最终不会关闭控制台.如果你通过调试运行它,你总是可以在结束括号中放置一个断点main().

  • 或者`使用std :: cin;`就此而言 (4认同)
  • 如果在源文件中有`using namespace std;`,那么是. (3认同)
  • std :: cin.get()只是命名空间std的成员吗?如果我包含<iostream>,我可以去:cin.get()吗? (2认同)
  • `std::cin.get()` 仅适用于 `Enter`,而`Console.ReadLine()` 适用于任何字符。 (2认同)

Mik*_*ler 23

正确的方式

cin.get();
Run Code Online (Sandbox Code Playgroud)

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();
        }
}
Run Code Online (Sandbox Code Playgroud)

我自己也用过它,这是一个很好的方法,当然只能在windows下使用它.另请注意,您可以使用以下命令启动程序,在Windows下以非编程方式实现此目的:

cmd /K consoleapp.exe
Run Code Online (Sandbox Code Playgroud)

错误的方法

请勿使用以下任何方法来实现此目的:

system("PAUSE");
Run Code Online (Sandbox Code Playgroud)

这将通过在程序中生成新的cmd.exe/command.com进程来执行windows命令'pause'.由于pause命令是特定于窗口的,因此这是完全不必要的并且也是不可移植的.不幸的是,我已经看过很多了.

getch();
Run Code Online (Sandbox Code Playgroud)

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


小智 8

如果您的问题是在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"的粗体.

  1. 右键单击"hello"(或任何项目名称).

  2. 从上下文菜单中选择"属性".

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

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

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

  6. 单击"应用",等待它完成所做的任何操作,然后单击"确定".(如果"Apply"显示为灰色,请选择其他子系统选项,单击Apply,然后返回并应用控制台选项.我的经验是OK本身不起作用.)

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

同样,CTRL-F5和子系统提示一起工作; 它们不是单独的选择.