Мой вопрос супер прост, но я перехожу от C# до C++, и я задавался вопросом, какая команда содержит консоль, открытую в C++?
Я знаю в C#, самый основной путь:
Console.ReadLine();
Или если Вы хотите позволить пользователю нажать какую-либо клавишу:
Console.ReadKey(true);
Как дела это в C++? Единственная причина я спрашиваю это простое из вопроса здесь, то, что я не смог найти хороший и четкий ответ там в Интернете.
Как насчет std :: cin.get ();
?
Кроме того, если вы используете Visual Studio, вы можете работать без отладки (CTRL-F5 по умолчанию), и он не закроет консоль в конце. Если вы запустите его с отладкой, вы всегда можете поместить точку останова в закрывающую скобку main ()
.
Правильный способ
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 ++. Это просто расширение компилятора, и некоторые компиляторы его не поддерживают.
Я поддерживаю это. Я поддерживаю это. В Windows вы можете использовать _getch ()
в заголовке
<conio.h>
.
Вы также можете немного опереться на IDE. Если вы запустите программу с помощью команды «Начать без отладки» (Ctrl + F5 для меня), окно консоли останется открытым даже после того, как программа завершится с помощью «Нажмите любую клавишу для продолжения ...». сообщение.
Конечно, если вы хотите использовать «Нажмите любую клавишу», чтобы ваша программа продолжала работать (т.е. поддерживать поток в рабочем состоянии), это не сработает. И не работает при запуске "с отладкой". Но тогда вы можете использовать точки останова, чтобы держать окно открытым.
Примерно те же вещи, что и на C #. Вызов getch ()
, вероятно, самый простой вариант.
если вы создаете консольное приложение, консоль будет оставаться открытой до тех пор, пока вы не закроете приложение.
если вы уже создали приложение и не знаете, как открыть консоль, вы можете изменить подсистема как консоль (/ Subsystem: Console) в конфигурациях проекта -> компоновщик -> система.
Более подходящий метод - использовать std :: cin.ignore
:
#include <iostream>
void Pause()
{
std::cout << "Press Enter to continue...";
std::cout.flush();
std::cin.ignore(10000, '\n');
return;
}