While, cin problem



  • Hallo zusammen

    Ich habe folgendes Problem:
    Wenn ich hier ein Buchstabe eingebe komme ich in eine Endlosschleife.
    Meine Frage ist wieso ist dies so und wie könnte ich dieses Problem lösen?

    while (wert[5] > 10 || wert[5] <= 0) {
                          system("cls");
                          cout << "Strenght: " << endl;
                          cin >> wert[5];
                          if (wert[5] > 10 || wert[5] <= 0) {
                                      cout << "Invalid input: Number <= 0 or > 10." << endl;
                                      system("pause > nil"); }
                          }
                          cout << "Strength: " << wert[5] << endl;
    

    Vielen Dank für eure Antworten.

    edit: wert[5] ist ein int.



  • operator >> entnimmt den Buchstaben nicht aus dem Puffer.

    if (invalid)
    {
      std::cin.clear(); // Setzt den Fehlerstatus zurück
      // Ignoriert eine Zeile
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    


  • cooky451 schrieb:

    operator >> entnimmt den Buchstaben nicht aus dem Puffer.

    if (invalid)
    {
      std::cin.clear(); // Setzt den Fehlerstatus zurück
      // Ignoriert eine Zeile
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    

    Ok thx. Jetzt klappts. Aber was genau bewirkt die unter Zeile? 😋



  • cin.ignore(streamsize n = 1, int delim = EOF);
    

    Bei dem Aufruf oben ist delim = '\n', also ignoriert er bis er ein '\n' findet.

    numeric_limits<unsigned>::max(); // Würde den Maximalwert für unsigned geben
    numeric_limits<double>::max() // Maximalwert für double
    numeric_limits<streamsize>::max() // Maximalwert für streamsize
    // Der hat bei ignore() eine besondere bedeutung, das ignoriert jetzt nämlich beliebig lange, 
    // bis es "delim" (hier '\n') trifft.
    


  • Vielen Dank für deine Antwort. 😃
    Mein Problem ist somit gelöst.


Anmelden zum Antworten