Eingabe auf 1 und 2 beschränken



  • Also ich hatte verschiedene Sachen wie Buchstaben, Sonderzeichen, Kommazahlen zum Testen eingegeben und die Schleife gab mir dann immer die Fehlermeldung zurück. Also für mich macht sie scheinbar das, was ich brauche.



  • Also sowas wie cin.DearPcPleaseLetEmOnlyEnterOneOrTwo() gibt's leider nicht, daher vergleiche doch mal den eingelesenen Wert und überprüfe ihn auf einen von dir gewünschten Bereich (oder auf ein paar einzelne Werte).



  • Ok du hast wohl recht damit, dass die Schleife diesen Zweck nicht zuverlässig erfüllt.

    Wie müsste ich die Eingabe gestalten, dass wirklich nur 1 oder 2 akzepiert werden und bei allen anderen Eingabe eine Fehlermeldung ausgegeben wird? Natürlich soll die Eingabe solange wiederholt bis eine gültige Eingabe getätigt wurde.



  • #include <iostream>
    
    int main()
    {
    char zahl=0;
    
    for(;zahl<'1'||zahl>'2';)
    {
        std::cin >> zahl;
        if(zahl<'1'||zahl>'2') std::cout << "Ungueltige Eingabe!\n";
    }
    
    return 0;
    }
    

    Edit: Ja mal wieder Unsinn produziert...



  • Bist du nicht in der Lage, den eingelesenen Wert zu vergleichen? Der Operator deines Vertrauens ist == oder != .



  • _matze schrieb:

    Bist du nicht in der Lage, den eingelesenen Wert zu vergleichen? Der Operator deines Vertrauens ist == oder != .

    Doch bin ich, aber ich hatte mit integer Variablen gearbeitet und damit keinen korrekt funktionierenden Algorithmus basteln können.
    Ich werd jetzt erstmal noch ein wenig probieren und bei Misserfolg mich nochmals melden.



  • Thuruk schrieb:

    #include <iostream>
    
    int main()
    {
    char zahl=0;
    
    for(;zahl<'1'||zahl>'2';)
    {
        std::cin >> zahl;
        if(zahl<'1'||zahl>'2') std::cout << "Ungueltige Eingabe!\n";
    }
    
    return 0;
    }
    

    Edit: Ja mal wieder Unsinn produziert...

    Wieso musst du hier unbedingt eine for-Schleife zweckentfremden? Weil es cool ist? 🙄



  • Hier mal eine einfache Loesung deines Problems,
    aber guck dir die Funktion erstmal genau an bevor du sie benutzt...:

    void vertausche(long& x, long& y) {
      long ablage = x;
      x = y;
      y = ablage;
    }
    
    long erfasse_long(long min, long max) {
      if (max < min)
        vertausche(min, max);
      long eingabe = 0;
      bool eingabe_ok = false;
      cin.clear();
      cin.unsetf(cin.skipws);
      do {
        cin >> eingabe;
        eingabe_ok = cin.good() && min <= eingabe && eingabe <= max;
        cin.clear();
        cin.ignore(static_cast<streamsize>(LONG_MAX), '\n');
        if (!eingabe_ok) {
          cout << "Bitte eine ganze Zahl eingeben [";
          cout << min << " - " << max << "]: ";
        }
      } while (!eingabe_ok);
      cin.setf(cin.skipws);
      return eingabe;
    }
    


  • _matze schrieb:

    Thuruk schrieb:

    #include <iostream>
    
    int main()
    {
    char zahl=0;
    
    for(;zahl<'1'||zahl>'2';)
    {
        std::cin >> zahl;
        if(zahl<'1'||zahl>'2') std::cout << "Ungueltige Eingabe!\n";
    }
    
    return 0;
    }
    

    Edit: Ja mal wieder Unsinn produziert...

    Wieso musst du hier unbedingt eine for-Schleife zweckentfremden? Weil es cool ist? 🙄

    Nein, eigentlich einfach ne schlechte Angewohnheit. Man kann ja alles damit machen.^^



  • Schlechte Angewohnheiten kannst du gerne zuhause praktizieren, aber sie an Anfänger weiterzugeben, ist sicher nicht der richtige Weg. 🙂


Anmelden zum Antworten