Wpis z mikrobloga

#cpp #programowanie
Robię sobie zadanka na studia w C++ i w większości jest schemat gdzie trzeba podać dane wejściowe z konsoli, postanowiłem napisać sobie metodę, która będzie pobierała wartość lub jak zrobimy skip line (enter) to bierze domyślną wartość.
W przypadku:

int from = getOrDefaultInteger("Podaj wartość początkową", 20);
int to = getOrDefaultInteger("Podaj wartość końcową", 100);

przy pobieraniu pierwszej wartości dam enter to nie pyta już o drugą wartość (od razu pobiera tą defaultValue), pewnie w buforze cin nie czyści się wartość, ale cin.clear() nie pomaga. Jakieś rady?
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Norskee: Ale skrypt kejder to nie programista. Zamiast jakiś jaw czy innych pytongów, weźmielibyście się za porządną robotę.

@Blue15: Proponuje schemat:

if(!getLine(cin, line) || line.empty() || !(stringstream{line} >> return_value ) ) return_value = default_value;
  • Odpowiedz
@Blue15: Tworzy zmienną tymczasową std::stringstream, na której wykonuje operator >> oraz operator !. Można tak robić, bo zmienna tymczasowa usunie się dopiero po obliczeniu całego wyrażenia. Normalnie można to napisać tak:

std::stringstream ss{ line };
ss >> return_value;
if( ss.fail() ) return defaul_value;
  • Odpowiedz