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

时间:2009-12-15 16:10:49

标签: c++ windows console

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

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

Console.ReadLine();

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

Console.ReadKey(true);

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

11 个答案:

答案 0 :(得分:63)

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

此外,如果您使用的是Visual Studio,则无需调试即可运行(默认情况下为CTRL-F5),并且最后不会关闭控制台。如果使用调试运行它,则总是可以在main()的右括号中添加断点。

答案 1 :(得分:22)

正确的方式

cin.get();

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

微软采取

Microsoft有一篇名为Preventing the Console Window from Disappearing的知识库文章。它描述了如何仅在必要时暂停执行,即仅当用户通过从资源管理器执行程序生成新的控制台窗口时。代码在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 ++标准库的一部分。它只是一个编译器扩展,一些编译器不支持它。

答案 2 :(得分:8)

如果您的问题是在Visual Studio中保留控制台窗口而没有 修改你的申请(c-code) 并使用Ctrl + F5运行它(当运行Ctrl + F5时),但窗口仍在关闭 主要提示是在Visual Studio项目中设置/ SUBSYSTEM:CONSOLE链接器选项。

由DJMooreTX解释 http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6

1)打开项目,然后转到解决方案资源管理器。如果您在K&amp; R中跟随我,那么您的“解决方案”将是“hello”,其中包含1个项目,也是“hello”的粗体。

  1. 右键单击“你好”(或任何你的项目名称。)

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

  3. 选择配置属性&gt;链接器&gt;系统。

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

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

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

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

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

答案 3 :(得分:4)

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

#include <iostream>

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

答案 4 :(得分:2)

您也可以稍微依靠IDE。如果你使用“Start without debugging”命令运行程序(对我来说是Ctrl + F5),即使程序以“按任意键继续......”结束,控制台窗口也会保持打开状态。信息。

当然,如果想要使用“命中任意键”来保持程序运行(即保持线程处于活动状态),这将无效。当你运行“with debugging”时它不起作用。但是你可以使用断点来打开窗口。

答案 5 :(得分:1)

在Windows中,您可以在

中使用_getch()
<conio.h>

头。

答案 6 :(得分:1)

我在我的环境中使用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;
}

答案 7 :(得分:1)

正如托马斯所说,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;
}

答案 8 :(得分:0)

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

如果您已经创建了一个应用程序并且您不知道如何打开控制台,则可以在项目配置中将子系统更改为控制台(/ Subsystem:Console) - &gt;链接器 - &gt;系统

答案 9 :(得分:0)

你在C#中所做的大致相同的事情。调用getch()可能是最简单的。

答案 10 :(得分:-3)

  

首先要包含你应该使用的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();
  }

谢谢