Нажмите Enter, чтобы продолжить

Это не работает:

string temp;
cout << "Press Enter to Continue";
cin >> temp;

person Elliot    schedule 24.05.2009    source источник
comment
Правильный способ добиться этого: inline void WaitEnter() { std::cout << "Press Enter to continue..."; while (std::cin.get()!='\n'); } Большинство ответов здесь просто бездельничают. Вы даже можете поместить это в лямбду, если хотите.   -  person slashmais    schedule 29.04.2018


Ответы (7)


cout << "Press Enter to Continue";
cin.ignore();

или лучше:

#include <limits>
cout << "Press Enter to Continue";
cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
person rlbond    schedule 24.05.2009
comment
Это действительно кросс-платформенный способ, можно поставить ‹‹ flush за cout и cin.sync() между этими строками, чтобы убедиться, что он работает в каждом случае. ;-) - person Tamara Wijsman; 24.05.2009
comment
cin привязан к cout, поэтому до того, как произойдет какой-либо ввод-вывод cin, вывод cout уже сбрасывается. - person Johannes Schaub - litb; 24.05.2009
comment
@dani Я думаю, он утверждает, что это лучше, потому что вторая версия явно ищет символ новой строки, как и требовалось. - person AndreasHassing; 18.07.2017
comment
В чем разница, разве cin.ignore() тоже не ищет символ новой строки? После быстрого теста здесь я не увидел никакой разницы в поведении. - person Alexander; 02.06.2018

Пытаться:

char temp;
cin.get(temp);

или, еще лучше:

char temp = 'x';
while (temp != '\n')
    cin.get(temp);

Я думаю, что ввод строки будет ждать, пока вы не введете реальные символы, а не только новую строку.

person paxdiablo    schedule 24.05.2009

Замените cin >> temp на:

temp = cin.get();

http://www.cplusplus.com/reference/iostream/istream/get/

cin >> будет ждать EndOfFile. По умолчанию cin будет иметь флаг skipws. set, что означает, что он «пропускает» любые пробелы, прежде чем они будут извлечены и помещены в вашу строку.

person Nick Presta    schedule 24.05.2009

Пытаться:

cout << "Press Enter to Continue";
getchar(); 

В случае успеха возвращается прочитанный символ (повышенный до значения int, int getchar ( void );), который можно использовать в тестовом блоке (while и т. д.).

person Ziezi    schedule 19.05.2015

Вам нужно включить conio.h, так что попробуйте это, это просто.

#include <iostream>
#include <conio.h>

int main() {

  //some code like
  cout << "Press Enter to Continue";
  getch();

  return 0;
}

При этом вам не нужна строка или целое для этого просто getch();

person HappyMajor    schedule 15.01.2017
comment
Этот ответ больше не работает, функция getch() устарела. - person Private_GER; 15.11.2017

Функция std::getline (уже представленная в C++98 ) предоставляет портативный способ реализовать это:

#include <iostream>
#include <string>

void press_any_key()
{
    std::cout << "Press Enter to Continue";
    std::string temp;
    std::getline(std::cin, temp);
}

Я нашел это благодаря этому вопросу и ответить после того, как я заметил, что std::cin >> temp; не возвращает пустой ввод. Поэтому мне было интересно, как поступить с необязательным пользовательским вводом (что имеет смысл, поскольку строковая переменная, конечно, может быть пустой).

person Wolf    schedule 13.12.2017
comment
Это единственное, что ест ложный ввод в случае, когда строка не пуста. При использовании в цикле другие ответы в этом случае будут запускать несколько итераций. - person Dan Stahlke; 24.08.2018

Еще одно решение, но для C. Требуется Linux.

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    printf("Press any key to continue...");
    system("/bin/stty raw"); //No Enter
    getchar();
    system("/bin/stty cooked"); //Yes Enter
    return 0;
}
person Ricky Gonce    schedule 31.01.2020