Я работаю над игрой 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;
}