do/while Schleifen Problem [gelöst]



  • Hallo zusammen,

    folgendes Problem: normalerweise sollte mein Code bei Fehleingabe der ersten Zahl (und auch der Zweiten - z.B. einer Kommazahl) die Eingabe löschen und solange den Vorgang wiederholen bis eine gültige Zahl eingegeben wurde (ganzzahlig).
    An sich erkennt er auch die Fehleingaben, doch leider nicht wie gewünscht. Folgendes passiert:

    "Bitte geben Sie die zweite Zahl ein:Das war keine gueltige Zahl!
    Bitte geben Sie die zweite Zahl ein:"

    Bin noch Anfänger und finde gerade einfach den Fehler nicht 😰

    do
    	{
    		printf("Bitte geben Sie die ertse Zahl ein:");
    		scanf_return = scanf_s("%i", &a);
    		if (scanf_return == 0)
    		{
    			printf("Das war keine gueltige Zahl!\n");
    			while (getchar() != '\n');
    		}
    	} while (scanf_return == 0);
    
    
    
    	do
    	{
    		printf("Bitte geben Sie die zweite Zahl ein:");
    		scanf_return = scanf_s("%i", &b);
    		if (scanf_return == 0)
    		{
    			printf("Das war keine gueltige Zahl!\n");
    			while (getchar() != '\n');
    		}
    	} while (scanf_return == 0);
    

    Danke schon einmal



  • @Suutix was gibst du denn für die erste Zahl ein?



  • Wenn ich zB. eine 5.7 eingebe bzw. Kommazahlen im Allgemeinen folgt der Fehler.
    Bei natürlichen Zahlen funktioniert der Code.



  • @Suutix sagte in do/while Schleifen Problem:

    Wenn ich zB. eine 5.7 eingebe bzw. Kommazahlen im Allgemeinen folgt der Fehler.
    Bei natürlichen Zahlen funktioniert

    Die 5 wird eingelesen und in a gespeichert. Somit ist das scanf erfolgreich gewesen und gibt eine 1 zurück.

    Der . bleibt aber im Eingabestrom stehen.
    Damit kann das scanf für b aber nichts anfangen und gibt die 0 zurück.

    scanf kann auch EOF zurück geben.



  • @DirkB Achso, und ich wundere mich hier seit geraumer Zeit,...

    Vielen Dank für die schnelle Hilfe!



  • @Suutix was soll denn in so einem Fall passieren.
    einfach die .7 verwerfen (der Nutzer wundert sich, wo die sind)

    Fehlermeldung und nochmal?

    Idiotensicher kann es nicht werden. Dagegen kommst du nicht an.



  • Mein Ziel ist das nur natürliche Zahlen von 0-100 eingegeben werden dürfen.
    Sprich bei Kommazahlen und anderen Werten soll er die Fehlermeldung bringen und den Nutzer hinweißen das der eingegebene Wert unzulässig.



  • @Suutix Das ist aufwändig.

    Heute macht man das meist mit der GUI.

    Lohnt sich das überhaupt (noch)?



  • @DirkB sagte in do/while Schleifen Problem [gelöst]:

    @Suutix Das ist aufwändig.

    Heute macht man das meist mit der GUI.

    Lohnt sich das überhaupt (noch)?

    Eigentlich nicht aufwändig. Einfach die Eingabe in einen String( Zeichenkette ), und nach jeder Eingabe den String Zeichen für Zeichen durchgehen. Ist ein Zeichen keine Zahl, dann Fehleingabe.


Anmelden zum Antworten