in cin>> nur Zahlen zulassen



  • Hi Ich (C++ Noob) habe mal ein kleines Zahlenratenprogramm geschrieben.
    Es wird eine Zahl von 1 bis 1000 generiert (Zeitabhängig) und dann immer gesagt ob die eingegebene Zahl größer oder kleiner ist.

    Klappt auch alles wunderbar nur wenn man einen Buchstaben anstatt einer Zahl eingibt startet anscheinend eine Endlosschleife in der "zu klein" ausgegeben wird.

    Kann man es mit if Abfragen so regeln das die Variable eingzahl nur Zahleneingaben zulässt? Hier ist der Code:

    #include <iostream>
    #include<stdlib.h>
    using namespace std;
    
    int main()
    {
        int versuche=0;
        int geszahl;
        int eingzahl;
        bool fehler;
        time_t t;
        srand(time(&t));
        geszahl=rand()%1000+1;
        cout<<"ErratenSie die Zahl (1-1000)"<<endl<<endl;
    
        while(eingzahl!=geszahl)
        {
    
          cin>>eingzahl;
    
         if (eingzahl>geszahl)
         {
             cout<<"Zu groß "<<endl<<endl;
             versuche++;
         } 
         else if (eingzahl<geszahl)
         {
             cout<<"Zu klein"<<endl<<endl;
             versuche++;
         } 
        else{break;}
    
    }
        if(eingzahl==geszahl)
        { 
        cout<<endl<<"Richtig die Zahl lautet "<<geszahl<<endl;
        cout<<"Sie haben "<<versuche<<" Versuche benoetigt"<<endl;
        system("PAUSE");
        }
    
    }
    

    Vielen dank schonmal im vorraus 😃

    Mfg Dede



  • Nein, aber du kannst danach überprüfen ob es eine Zahl war:

    if(cin.fail() || cin.bad()) {
        cin.clear();
        cout << "Du Hirsch bist zu dumm die Tastatur zu bedienen!";
        exit(-1); // net schön
    }
    


  • Hmm. ja das klappt aber ich will nicht die schleife verlassen sondern wieder zum anfang der Schleife damit ich erneut die Möglichkeit habe einzugeben.



  • Dede16 schrieb:

    Hmm. ja das klappt aber ich will nicht die schleife verlassen sondern wieder zum anfang der Schleife damit ich erneut die Möglichkeit habe einzugeben.

    Statt dem Aufruf von exit() schreibst du "continue;".

    MfG SideWinder



  • Guten Morgen.

    Leider klappt es noch immer nicht.

    #include <iostream>
    #include<stdlib.h>
    using namespace std;
    
    int main()
    {
    
        int geszahl;
        int eingzahl=0;
        int versuch=0;
        time_t t;
        srand(time(&t));
        geszahl=rand()%1000+1;
        cout<<"ErratenSie die Zahl (1-1000)"<<endl<<endl;
    
      do
      {
        :arrow_right:  cin>>eingzahl;
        if(cin.fail() || cin.bad()) 
        {
           cin.clear();
           cout << "Gebe eine Zahl ein!";
           :arrow_right:  continue; 
        } 
    
        else if(eingzahl<geszahl)
        {
             cout<<"Zu klein"<<endl<<endl;
             versuch++;
        }
    
        else if (eingzahl>geszahl)
        {
             cout<<"Zu groß"<<endl<<endl;
             versuch++;
        }
    
       else{}
    
      }
      while(eingzahl!=geszahl);
    
      }
    

    Nach dem continue sollte eigentlich die schleife durchlaufen sein und wieder bei

    cin>>eingzahl;
    

    anfangen.
    Doch es ensteht eine endlosschleife in der immer weiter "Gebe eine Zahl ein!" steht.


Anmelden zum Antworten