use cin.ignore to avoid leaking input buffer in future calls

This commit is contained in:
2025-01-15 22:18:09 +01:00
parent d82860f843
commit d3daa584e9
3 changed files with 15 additions and 3 deletions

View File

@@ -154,8 +154,8 @@ void Board::render() {
void Board::updateAndRender() { void Board::updateAndRender() {
this->render();
this->update(); this->update();
this->render();
} }

View File

@@ -76,6 +76,12 @@ void Engine::nextTurn() {
<< "> "; << "> ";
while (true) { while (true) {
// Czyścimy bufor, aby zignorować cokolwiek, co pojawiło się po znaku
// białym a przed \n - aby np. żaden z użytkowników nie mógł
// napisać "a a" i potencjalnie zadecydować o ruchu oponenta.
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin >> choice; std::cin >> choice;
choice |= 32; choice |= 32;

View File

@@ -238,6 +238,10 @@ void Game::run() {
std::cout << "Wpisz nazwe gracza " << (i + 1) << " (" << colorNames[i] << "): "; std::cout << "Wpisz nazwe gracza " << (i + 1) << " (" << colorNames[i] << "): ";
std::cin >> name; std::cin >> name;
// Zignoruj zawartość bufora do \n, aby zapobiec nadpisywaniu ziarna
// poprzez podanie nazwy ze znakami białymi.
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
#ifndef CHINCZYK188_IGNORE_USER_SEED #ifndef CHINCZYK188_IGNORE_USER_SEED
// Jeżeli nie została zdefiniowana flaga do ignorowania ziarna użytkownika // Jeżeli nie została zdefiniowana flaga do ignorowania ziarna użytkownika
// (deterministyczne losowanie), to pozwól na wprowadzanie ziaren. // (deterministyczne losowanie), to pozwól na wprowadzanie ziaren.
@@ -251,8 +255,10 @@ void Game::run() {
engine.addPlayer(name, seed, color); engine.addPlayer(name, seed, color);
board.updateAndRender(); board.updateAndRender();
//this->update();
//this->render(); // Podobnie, jak wyżej
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} }
// Przekaż ev i window, aby obsługiwać zdarzenia // Przekaż ev i window, aby obsługiwać zdarzenia