清除输入缓冲区,包括换行符

时间:2012-03-13 14:06:07

标签: c++ boost input timer flush

我有一个计时器线程,将来会执行五秒钟,并有一个循环来等待它完成执行。然后程序在用户点击进入时结束。我注意到在等待循环时,输入被接受到输入缓冲区,并用于完成程序,任何后续输入命中都输入到命令行

我想忽略在“按Enter退出”之前输入的所有输入,包括输入。自从我使用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 个答案:

答案 0 :(得分:2)

在纯粹的C ++级别上无法做到这一点;你不得不放弃 到操作系统级别,或使用一些第三方库,如curses(或 也许是一些异步IO库,如果你可以让他们阅读cin 异步)。