Problem bei Zahlenkontrolle



  • Hallo, ich habe eine Methode geschrieben, welche nur "zahl" oder "zahl*zahl" akzeptieren soll. leider habe ich beim Testen das Problem gefunden, dass auch 2*-2 geht. Wie kann ich das abfangen?

    int ziffernfeld(){
        //char eingabe[20];
        int dateiname;
        int anzahl;
        //regex
        int a,b, check;
        printf("Eingabe machen (zahl oder zahl*zahl):\n");
        check = scanf("%i*%i",&a ,&b);
        fflush(stdin);  /* unter Linux entfernen */
        //getchar();    /* für Linux*/
        /* Ist check gleich 2, war die Eingabe zahl*zahl */
        if(check == 2)
        {
            //anzahl =a/dateiname = b;
            anzahl = a;
            dateiname = b;
            printf("Es wird %d mal die Datei %d gedruckt\n",anzahl ,dateiname);
    
        }
        else if(check == 1) {
           // printf("Es wurde nur eine Zahl eingegeben\n");
            anzahl = 1;
            //hier noch abfangen, falls d = -zahl
            dateiname = a;
            fflush(stdin);
            if(check)
                printf("Es wird %d mal die Datei %d gedruckt\n",anzahl,dateiname);
            else
                printf("Leider ist die Eingabe falsch\n");
    
        }
        else {
            printf("Fehlerhafte Eingabe");
            ziffernfeld();
        }
        printf("\n");
        return 0;
    }
    


  • -2 ist doch eine gültige Zahl.

    Wenn du nur positive Werte haben möchtest, dann nimm unsigned Typen.
    Vergiss aber nicht, den richtigen Formatspecifier bei scanf zu nehmen.

    Und dann benutze bitte Code-Tags für deinen Code.
    Code mit der Maus markieren und auf den C-Button unter dem 😡 klicken.
    Als registrierter Nutzer kannst du das sogar noch nachträglich ändern.
    Sonst schaut sich den Code kaum einer an.



  • Danke.

    Wie schon geschrieben, nimm unsigned als Datentyp für a und b.

    Den rekursive Aufruf von ziffernfeld solltest du auch vermeiden.

    Abgesehn davon, dass man fflush(stdin) vermeiden sollte, ist es in Zeile 25 gar nicht nötig.
    Das getchar(); in Zeile 10 würde deine Probleme aber auch nicht lösen.


Anmelden zum Antworten