Очистить входной буфер, включая перевод строки - PullRequest
0 голосов
/ 13 марта 2012

У меня есть поток таймера, который будет выполняться в течение пяти секунд в будущем, и цикл ожидания его завершения.Затем программа завершает работу, когда пользователь нажимает клавишу ввода.Я заметил, что во время ожидания цикла ввод принят во входной буфер и используется для завершения программы, и любые последующие нажатия ввода вводятся в командную строку !

Я хочу игнорировать все входные данные, которые были введены до «нажмите ввод для выхода», включая ввод.Прошло много времени с тех пор, как я работал с C ++, и я не могу вспомнить, как это сделать (я искал SO и Google и не могу найти ответ на этот конкретный вопрос).Вот мой пример:

std::cout << "Timer test: wait 5 seconds\n";
boost::asio::io_service test_io;
deadline_timer test_timer(test_io, posix_time::seconds(5));

int testInt = 0;
auto asynctest = [&testInt](const boost::system::error_code&) {
    std::cout << "Running asynctest()\n";
    testInt = 5;
};

std::cout << "Starting asynchtest, which should output in 5 seconds\n";
test_timer.async_wait(boost::bind<void>(asynctest, boost::asio::placeholders::error));

while(testInt != 5) {
    std::cout << ". ";
    boost::this_thread::sleep(boost::posix_time::milliseconds(200));
}

// How do I clear all input from the input stream here so that if the user hit enter
//    during the timer countdown it will be cleared and user still must hit enter to
//    exit program?

std::cout << "Press enter to exit\n";
std::cin.ignore(80, '\n');
return 1;

adsf

1 Ответ

2 голосов
/ 13 марта 2012

Нет способа сделать это на чисто C ++ уровне; вам придется бросить до уровня ОС, или используйте стороннюю библиотеку, такую ​​как curses (или может быть, какая-нибудь асинхронная библиотека ввода-вывода, если вы можете заставить их читать cin асинхронно).

...