четверг, 2 апреля 2009 г.

Ожидание нажатия на Enter в C++

При переписывании старых паскалевских лаб на C++ столкнулся с проблемой:
в некоторых случаях нужно что-то показать юзеру и подождать, пока он не нажмёт Enter.
В паскале это решалось функцией ReadLn(), а в Си обычно в этих случаях юзают getchar() (в C++ cin.get()).
Но. Если до этого момента осуществлялся ввод, то, если он не был полностью считан, оставшиеся в буфере символы будут схаваны getchar'ом и, соответственно, пользователя ждать никто не станет. Выходов несколько - либо считать несколько раз (что некрасиво), либо вычистить буфер и считать один раз.
Нашёл реализацию второго способа (ссылка) и доработал его слегка. Вот что получилось:

#include <iostream>
#include <limits>
using namespace std;

void MyPause()
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(),'\n'); // Очистка буфера
cout << "Нажмите Enter для продолжения..." << endl;
cin.ignore(numeric_limits<streamsize>::max(),'\n');
}

4 комментария:

Анонимный комментирует...

гавно твой код

AccessD комментирует...

аргументируй

Анонимный комментирует...

Спасибо, помогло=)

AccessD комментирует...

Пожалуйста )