Eingabe auf 1 und 2 beschränken
-
Ich habe folgende Schleife damit die Eingabe nur auf ganze Zahlen beschränkt ist.
while(true) { cin >> zwahl; if (cin.peek() == '\n') { cin.get(); break; } else{ cout <<"Keine gueltige Zahl eingegeben, Eingabe wiederholen! (nur ganze Zahlen):" << endl; cin.clear(); while (cin.get() != '\n'){} } }Wie müsste man diese Schleife erweitern, dass nur die Zahlen 1 oder 2 akzeptiert werden?
-
Vergleiche doch einfach, ob der eingelesene Wert 1 oder 2 ist. Wenn nicht, lässt du noch mal eingeben...
-
Formulier doch mal mathematisch, was so eine Zahl auszeichnet. Das formulierst du dann als Funktion und prüfst es.
(edit: Ach, du meinst nur 1 und 2. Ich dachte du meintest, dass nur die Ziffern 1 und 2 vorkommen dürfen. Dann hat sich das obige erledigt)Dein Codebeispiel macht übrigens vieles, aber er prüft ganz bestimmt nicht zuverlässig, ob eine Eingabe eine Ganzzahl war.
-
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.
