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.
Dasgetchar();
in Zeile 10 würde deine Probleme aber auch nicht lösen.