Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » loop problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.10.2007, 20:43 Uhr
simschda



Hallo,
Ich habe Probleme mit folgendem Code:


C++:
int main()
{
cout<<"Which card is the Queen, 1, 2 or 3?"<<endl;
                int guess;
                bool card;
                card = false;
        
        while(!card)
        {
            cout<<"guess!"<<endl;
            cin>>guess;
        
            if ((guess>=1) && (guess<=3))
            {card=true;    
            cout<<"exit loop";}
            
            else
                cout<<"invalid guess!"<<endl<<"try again!";
            }
return 0;
}




Der Benutzer soll eine Zahk zwischen 1 und 3 eingeben.
Tut er das nicht, wählt er z.B. eine andere Zahl oder eine tippt einen string oder array von char ein soll das programm ihm den hinweis "invalid guess" liefern und er solls nochmal versuchen.
Beim Type int funktioniert das noch, wenn man allerdings einen char Type wie "a" eingibt, liefert das Programm eine Endlosschleife.
Wie kann Ich erreichen, dass bei jeder anderen Eingabe als 1, 2 oder 3 dea zweite Statement nach dem if ausgeführt wird und man erneut zum "cin>>guess" kommt?
(Vielleicht besser mit switch, wegen default case?)

Danke für die Hilfe!

Dieser Post wurde am 14.10.2007 um 21:46 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.10.2007, 22:37 Uhr
0xdeadbeef
Gott
(Operator)


Es bleiben Rückstände im Eingabestrom, die du auflösen musst. Ich würde an der Stelle den Input gleich zeilenweise verarbeiten, weil das ja logisch ist, was du willst. Das sieht dann etwa so aus:

C++:
#include <iostream>
#include <sstream>
#include <string>

int main()
{
  using namespace std;

  int guess;
  bool card;

  cout << "Which card is the Queen, 1, 2 or 3?" << endl;

  do {
    string line;
    istringstream is;

    cout << "guess!" << endl;

    getline(cin, line);
    is.str(line);
    is >> guess;
        
    if (is && guess >= 1 && guess <= 3) {
      card = true;    
      cout << "exit loop" << endl;
    } else {
      cout << "invalid guess!" <<  endl
           << "try again!" << endl;
    }
  } while(!card);

  return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 14.10.2007 um 22:39 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: