AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[C++] "cin" wird übersprungen

Ein Thema von Matze · begonnen am 8. Nov 2007 · letzter Beitrag vom 11. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[C++] "cin" wird übersprungen

  Alt 8. Nov 2007, 21:44
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
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#2

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

  Alt 8. Nov 2007, 22:13
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().
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von bigg
bigg

Registriert seit: 1. Jul 2007
155 Beiträge
 
#3

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

  Alt 8. Nov 2007, 23:33
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.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

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

  Alt 9. Nov 2007, 00:53
Hatten wir das Thema nicht schon einmal?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

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

  Alt 9. Nov 2007, 06:30
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.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

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

  Alt 10. Nov 2007, 08:06
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
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

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

  Alt 10. Nov 2007, 08:47
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)));
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

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

  Alt 10. Nov 2007, 09:48
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
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#9

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

  Alt 10. Nov 2007, 11:13
Das ging irgend wie mit cin.get() ohne die Verwendung der Pipes ">>".

Code:
 blabla := (char) cin.get();
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#10

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

  Alt 10. Nov 2007, 11:28
Das hatte ich auch bereits versucht, doch dann wird die Eingabe gar nicht erst akzeptiert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:57 Uhr.
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