![]() |
[C++] "cin" wird übersprungen
Hallo,
ich versuche auf eine ganz primitive Art eine Eingabe auf einen gültigen Wert zu überprüfen. Die Variable "eingabe" ist vom Typ "unsigned int". Das ist mein Code:
Code:
Solange ich Zahlen eingebe, geht das einwandfrei und ich werde jedesmal aufgefordert, eine neue Eingabe zu tätigen. Gebe ich jedoch einen Buchstaben ein, dann lande ich in einer Endlosschleife, die mir ständig den Text "Fehleingabe ..." ausgibt.
do
{ if (! ersterDurchlauf) { cout << "\n\t --> Fehleingabe!\n"; cout << "\t Geben Sie eine ganze Zahl zwischen 1 und 4 ein.\n"; } ersterDurchlauf = false; cin >> eingabe; } while (! ((eingabe == 1) || (eingabe == 2) || (eingabe == 3) || (eingabe == 4))); Der Wert von "eingabe" ist beispielsweise bei eingegebenem Buchstaben "m" immer 3435973836; Was mache ich falsch? Liegt's an "unsigned int"? Grüße |
Re: [C++] "cin" wird übersprungen
Nein, das ist eins von diesen dummen Dingern mit cin. Prüfe auf cin.good() (oder cin.bad()) und wenn es nicht gut ist, lösche den Fehler mit cin.clear(). Ach so, und dann musste man noch irgendwie die Eingabe überspringen, weil sie im Puffer bleibt, ich weiß aber nicht mehr, wie der Befehl dazu heißt.
cin ist doof. Edit: Ach ja. Überpringen mit ignore(). |
Re: [C++] "cin" wird übersprungen
Hi Matze,
ich würde einen anderen Datentyp wählen z.B. char oder string. Per getch() oder getchar() erhält man ein Zeichen von der Tastatur. Die Funktionen warten auf die Tasteneingabe. |
Re: [C++] "cin" wird übersprungen
Hatten wir das Thema nicht schon einmal?
|
Re: [C++] "cin" wird übersprungen
Hallo,
dankesehr. @Oregon: Folgender Code ändert beim Verhalten jedoch nichts:
Code:
cin ist wirklich nicht ganz das Wahre. :?
if (cin.bad())
{ cin.clear(); cin.ignore(); } @bigg: Diese Funktionen kenne ich, doch wir sollen Ein- und Ausgaben nur mit cin und cout lösen, leider. @Matti: Über die Suche habe ich kein Thema dieser Art gefunden, was natürlich nichts heißen mag. |
Re: [C++] "cin" wird übersprungen
Hallo,
ich habe nun auch Exoten wie
Code:
versucht, doch das bewirkt alles nichts. Kann es sein, dass das mit cin gar nicht möglich ist oder muss das irgendwie gehen?
cin.ignore(cin.rdbuf()->in_avail());
Grüße |
Re: [C++] "cin" wird übersprungen
Code:
do { cin.clear(); while (cin.get() != '\n'); // Puffer löschen if (! ersterDurchlauf) { cout << "\n\t --> Fehleingabe!\n"; cout << "\t Geben Sie eine ganze Zahl zwischen 1 und 4 ein.\n"; } ersterDurchlauf = false; cin >> eingabe; } while (! ((eingabe == 1) || (eingabe == 2) || (eingabe == 3) || (eingabe == 4))); |
Re: [C++] "cin" wird übersprungen
Hallo Matti,
hey super danke, das ist schon fast das, was ich brauche. Buchstaben werden nun abgefangen. Ich muss jedoch die Eingabe 2x tätigen, damit diese akzeptiert wird. Hättest du dafür evtl. noch eine Lösung parat? Ich habe auch schon solche Spielereien getestet, doch diese funktionierten ebenfalls nicht:
Code:
Grüße, Matti :stupid:
while (! cin.eof())
cin.get(); |
Re: [C++] "cin" wird übersprungen
Das ging irgend wie mit cin.get() ohne die Verwendung der Pipes ">>".
Code:
blabla := (char) cin.get();
|
Re: [C++] "cin" wird übersprungen
Das hatte ich auch bereits versucht, doch dann wird die Eingabe gar nicht erst akzeptiert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz