C ++ Есть ли способ отбросить несколько строк ввода std :: cin - PullRequest
1 голос
/ 31 марта 2020

Я работаю над игрой TCP для двух игроков, которая запускается в терминале. Во время хода противника игрок может написать все, что он хочет, в std :: cin. После окончания хода эта буферизованная информация отправляется в игру, чего я бы хотел избежать.

Player 2's Turn
unwanted-line1
unwanted-line2
unwanted-line3

, в результате чего:

Player 1's turn
> unwanted-line 1

Я пытался использовать std::ignore(<std::streamsize>::max()) но он просто останавливает программу.

Я получил рекомендацию использовать putback(char-that-can't-be-written) и делать std::ignore() до того же самого char, хотя это не сработало, потому что putback помещает char в начало буфера

Сон можно использовать для воспроизведения примера

    #include <iostream>
    #include <unistd.h>
    #include <string>
    #include <limits>

    int main(){
        usleep(10000000);
        std::cout << "stopped sleeping" << std::endl;

        if(std::cin.putback(27)){
            std::cin.clear();
            std::cin.ignore(std::numericlimits<std::streamsize>::max(), 27);
        }

        std::string input;
        std::getline(std::cin, input);
        std::cout << "input: " << input;

        return 0;
    }
...