Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C++] "cin" wird übersprungen (https://www.delphipraxis.net/103034-%5Bc-%5D-cin-wird-uebersprungen.html)

Matze 8. Nov 2007 20:44


[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:
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)));
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.

Der Wert von "eingabe" ist beispielsweise bei eingegebenem Buchstaben "m" immer 3435973836;

Was mache ich falsch? Liegt's an "unsigned int"?

Grüße

OregonGhost 8. Nov 2007 21:13

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().

bigg 8. Nov 2007 22:33

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.

turboPASCAL 8. Nov 2007 23:53

Re: [C++] "cin" wird übersprungen
 
Hatten wir das Thema nicht schon einmal?

Matze 9. Nov 2007 05:30

Re: [C++] "cin" wird übersprungen
 
Hallo,

dankesehr.

@Oregon: Folgender Code ändert beim Verhalten jedoch nichts:

Code:
if (cin.bad())
{
   cin.clear();
   cin.ignore();
}
cin ist wirklich nicht ganz das Wahre. :?

@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.

Matze 10. Nov 2007 07:06

Re: [C++] "cin" wird übersprungen
 
Hallo,

ich habe nun auch Exoten wie

Code:
cin.ignore(cin.rdbuf()->in_avail());
versucht, doch das bewirkt alles nichts. Kann es sein, dass das mit cin gar nicht möglich ist oder muss das irgendwie gehen?

Grüße

turboPASCAL 10. Nov 2007 07:47

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)));

Matze 10. Nov 2007 08:48

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:
while (! cin.eof())
   cin.get();
Grüße, Matti :stupid:

turboPASCAL 10. Nov 2007 10:13

Re: [C++] "cin" wird übersprungen
 
Das ging irgend wie mit cin.get() ohne die Verwendung der Pipes ">>".

Code:
 blabla := (char) cin.get();

Matze 10. Nov 2007 10:28

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:53 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz