While, cin problem
-
Hallo zusammen
Ich habe folgendes Problem:
Wenn ich hier ein Buchstabe eingebe komme ich in eine Endlosschleife.
Meine Frage ist wieso ist dies so und wie könnte ich dieses Problem lösen?while (wert[5] > 10 || wert[5] <= 0) { system("cls"); cout << "Strenght: " << endl; cin >> wert[5]; if (wert[5] > 10 || wert[5] <= 0) { cout << "Invalid input: Number <= 0 or > 10." << endl; system("pause > nil"); } } cout << "Strength: " << wert[5] << endl;
Vielen Dank für eure Antworten.
edit: wert[5] ist ein int.
-
operator >> entnimmt den Buchstaben nicht aus dem Puffer.
if (invalid) { std::cin.clear(); // Setzt den Fehlerstatus zurück // Ignoriert eine Zeile std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
-
cooky451 schrieb:
operator >> entnimmt den Buchstaben nicht aus dem Puffer.
if (invalid) { std::cin.clear(); // Setzt den Fehlerstatus zurück // Ignoriert eine Zeile std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
Ok thx. Jetzt klappts. Aber was genau bewirkt die unter Zeile?
-
cin.ignore(streamsize n = 1, int delim = EOF);
Bei dem Aufruf oben ist delim = '\n', also ignoriert er bis er ein '\n' findet.
numeric_limits<unsigned>::max(); // Würde den Maximalwert für unsigned geben numeric_limits<double>::max() // Maximalwert für double numeric_limits<streamsize>::max() // Maximalwert für streamsize // Der hat bei ignore() eine besondere bedeutung, das ignoriert jetzt nämlich beliebig lange, // bis es "delim" (hier '\n') trifft.
-
Vielen Dank für deine Antwort.
Mein Problem ist somit gelöst.