Zahlen ohne Buchstaben



  • Hallo,
    wenn ich ein Programm schreibe das ausschließlich integer enthalten darf (für Berechnungen) und der User z.B.: beim cin einen Buchstaben oder ein Sonderzeichen eingibt, stürtzt das Programm ab.
    Wie kann ich dem Programm beibringen, dass keine Buchstaben etc erlaubt sind?

    Also es dürfen nur alle ganzen Zahlen > 0 eingegeben werden.

    Also kurz gesagt: wie "verbietet" man Buchstaben und Sonderzeichen?

    Vielen Dank im voraus.

    MfG
    ++



  • Indem du nach dem Einlesen das failbit von cin testest (geht einfach durch die Konvertierung von cin zu bool). Das die Zahl größer als 0 ist musst du dann noch selbst testen.



  • sebi707 schrieb:

    Indem du nach dem Einlesen das failbit von cin testest (geht einfach durch die Konvertierung von cin zu bool). Das die Zahl größer als 0 ist musst du dann noch selbst testen.

    Das Programm läuft so ja. Gibt man eine Zahl größer null ein dann funktioniert alles. Gibt man eine Zahl kleiner gleich 0 ein wird man über den cout erneut aufgefordert eine Zahl größer null einzugeben (und das so lange bis eine > 0 kommt). So weit so gut. Nur gebe ich nun einen Buchstaben oder ein Sonderzeichen ein läuft in einer Endlosschleife die cout Warnung ( Please insert a value > = 0 ).
    Mit bool kann ich ja nur auf true oder false testen. Deinen Grundgedanken versteh ich zwar aber müsste ich hierfür dann nicht eine rießen Aufzählung auflisten was er darf und was nicht?

    Kann ich es nicht hier einbauen (hab mal als Darstellung "&& Zahl kein Buchstabe" verwendet):

    while (zahl <= 0 && zahl kein Buchstabe) {
    cout << "Please insert a value > 0! \n";
    cin >> zahl;
    }



  • ++ schrieb:

    Kann ich es nicht hier einbauen (hab mal als Darstellung "&& Zahl kein Buchstabe" verwendet):

    while (zahl <= 0 && zahl kein Buchstabe) {
    cout << "Please insert a value > 0! \n";
    cin >> zahl;
    }

    Ich meine natürlich
    && zahl ein Buchstabe



  • So könnte das ganze aussehen:

    #include <iostream>
    #include <limits>
    
    using namespace std;
    
    int main()
    {
    	int num;
    	cout << "Zahl eingeben: ";
    	cin >> num;
    	while(!cin || num <= 0)  // Einlesen wiederholen falls failbit gesetzt oder Zahl <= 0
    	{
    		cin.clear();  // failbit zurücksetzen
    		cin.ignore(numeric_limits<streamsize>::max(), '\n');  // Letzte Eingabe ignorieren
    
    		// Erneut einlesen
    		cout << "Zahl erneut eingeben: ";
    		cin >> num;
    	}
    	cout << num << endl;
    }
    

    Ich habe vorhin vergessen zu erwähnen, dass man cin nach einer fehlerhaften Eingabe erst zurücksetzen muss damit man wieder erneut was einlesen kann


Log in to reply