Консольная пауза в C++?

В C# вы можете заставить консоль ждать ввода символа (что полезно для возможности увидеть последние выходные данные консоли перед выходом из программы). Как новичок в C++, я не уверен, что такое эквивалент. Есть один?

4 ответа

Самый простой способ это просто:

std::cin.get();

Вы можете напечатать что-то вроде "Нажмите любую клавишу, чтобы продолжить..." до этого. Некоторые люди расскажут вам о

system("pause");

Но не используйте это. Это не портативно.

#include <stdio.h>
// ...
getchar();

The function waits for a single keypress and returns its (integer) value.

Например, у меня есть функция, которая делает то же самое, что и System("pause"), но не требуя, чтобы "pause.exe" (который является потенциальным целым безопасности, кстати):

void pause()
{
  std::cout << std::endl << "Press any key to continue...";
  getchar();
}

В стандарте ничего нет, и ничего кроссплатформенного. Обычный метод - дождаться нажатия клавиши , а затем отбросить результат.

Неправильное решение будет использовать system("pause") поскольку это создает дыры в безопасности (вредоносный pause.exe в каталоге!) и не является кроссплатформенным (пауза существует только в Windows/DOS).

Есть более простое решение:

void myPause() {
    printf("Press any key to continue . . .");
    getchar();
}

Это использует getchar(), который соответствует POSIX (см. это). Вы можете использовать эту функцию следующим образом:

int main() {
    ...
    myPause();
}

Это эффективно предотвращает мигание консоли, а затем ее выход.

Другие вопросы по тегам