C++ - Держать открытую консоль?

Мой вопрос супер прост, но я перехожу от C# до C++, и я задавался вопросом, какая команда содержит консоль, открытую в C++?

Я знаю в C#, самый основной путь:

Console.ReadLine();

Или если Вы хотите позволить пользователю нажать какую-либо клавишу:

Console.ReadKey(true);

Как дела это в C++? Единственная причина я спрашиваю это простое из вопроса здесь, то, что я не смог найти хороший и четкий ответ там в Интернете.

37
задан Abel 8 April 2012 в 15:29
поделиться

7 ответов

Как насчет std :: cin.get (); ?

Кроме того, если вы используете Visual Studio, вы можете работать без отладки (CTRL-F5 по умолчанию), и он не закроет консоль в конце. Если вы запустите его с отладкой, вы всегда можете поместить точку останова в закрывающую скобку main () .

65
ответ дан 27 November 2019 в 04:15
поделиться

Правильный способ

cin.get();

cin.get () совместим с C ++ и переносится. Он получит следующий символ из стандартного ввода (stdin). Пользователь может нажать Enter, и ваша программа продолжит выполнение или завершится в нашем случае.

Точка зрения Microsoft

В базе знаний 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");

Это приведет к выполнению команды Windows «пауза», порождая новый процесс cmd.exe / command.com в вашей программе. Это совершенно ненужно и непереносимо, так как команда паузы зависит от Windows. К сожалению, я видел это много.

getch();

Это не часть стандартной библиотеки C / C ++. Это просто расширение компилятора, и некоторые компиляторы его не поддерживают.

Я поддерживаю это.

Я поддерживаю это.

23
ответ дан 27 November 2019 в 04:15
поделиться

В Windows вы можете использовать _getch () в заголовке

<conio.h>

.

1
ответ дан 27 November 2019 в 04:15
поделиться

Вы также можете немного опереться на IDE. Если вы запустите программу с помощью команды «Начать без отладки» (Ctrl + F5 для меня), окно консоли останется открытым даже после того, как программа завершится с помощью «Нажмите любую клавишу для продолжения ...». сообщение.

Конечно, если вы хотите использовать «Нажмите любую клавишу», чтобы ваша программа продолжала работать (т.е. поддерживать поток в рабочем состоянии), это не сработает. И не работает при запуске "с отладкой". Но тогда вы можете использовать точки останова, чтобы держать окно открытым.

2
ответ дан 27 November 2019 в 04:15
поделиться

Примерно те же вещи, что и на C #. Вызов getch () , вероятно, самый простой вариант.

0
ответ дан 27 November 2019 в 04:15
поделиться

если вы создаете консольное приложение, консоль будет оставаться открытой до тех пор, пока вы не закроете приложение.

если вы уже создали приложение и не знаете, как открыть консоль, вы можете изменить подсистема как консоль (/ Subsystem: Console) в конфигурациях проекта -> компоновщик -> система.

0
ответ дан 27 November 2019 в 04:15
поделиться

Более подходящий метод - использовать std :: cin.ignore :

#include <iostream>

void Pause()
{
   std::cout << "Press Enter to continue...";
   std::cout.flush();
   std::cin.ignore(10000, '\n');
   return;
}
4
ответ дан 27 November 2019 в 04:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: