C Nur Zahlen eingeben

Danny787

Ensign
Registriert
Jan. 2007
Beiträge
180
wir mussten heute einen simplen taschenrechner programmieren, welcher additionen, subtraktionen, multiplikationen und divisionen durchführen kann.
das programm läuft zwar, jedoch will ich noch eine kleine korrektur vornehmen.
der user wird am anfang aufgefördet eine zahl, dann einen operator (+,-,*,/) und danach erneut eine zahl in die konsole einzugeben.
nun will ich festlegen, dass wenn der user anstatt einer zahl einen buchstaben, sonderzeichen usw eingibt, eine fehlermeldung erscheint, also dass er darauf hingewiesen wird, dass man nur zahlen eingeben darf.
wie könnte ich das am besten umsetzen?

danke schonmal für eure vorschläge
 
Die scanf(...) Funktion kann solche Überprüfungen schon selbst vornehmen.
Dazu musst du den Formatparameter für den von dir gewünschten Typ richtig einstellen.
Wenn du dann och den Rückgabewert von scanf() prüfst bist du schon am Ziel.
PHP:
01 #include <stdio.h>
02
03 int main()
04 {
05    int i;
06    float f;
07
08    printf("Bitte eine ganze Zahl & eine Reele Zahl eingeben: ");
09    scanf("%i %f", &i, &f);
10    printf("Sie haben %i und %f eingegeben!\n", i, f);
11
12    return 0;
13 }
Geklaut von http://public.beuth-hochschule.de/~kempfer/skript_c/Kap06.html
 
Hallo aus 2012 :D

Ich habe ein Ähnliches Problem.

Mein Scanf ließt INTEGER ein, aber wenn man Buchstaben eingibt, wandelt er das in Zahlen um. Das soll nicht geschehen. Wie kann ich das herausfiltern, dass bei Eingabe von Buchstaben z.B. nen Error kommt?
 
Lies es als String ein. Dann geh sie durch und schmeiß einen Fehler, wenn ein Zeichen kleiner '0' oder größer
als '9' ist. Wenn nicht, atoi(), oder mach die Umwandlung nach int im selben Schritt. Zum Beispiel indem du
mit 0 anfängst, dann vom Zeichen ganz rechts '0' abziehst und prüfst, ob das Ergebnis kleiner 0 oder größer
9 ist. Wenn ja, addieren und mal 10 nehmen und wiederholen bis du am Anfang bist.
 
Zuletzt bearbeitet:
Code:
  EingabeA: 
  printf("\nGeben Sie bitte a ein");  
  if(1==scanf("\n%d",&a))
  {
  printf("\n%d",a);     
}                                         
else
{   
  printf("\n Fehler! Nur Zahlen erlaubt",a);
  a=0;
  goto EingabeA; 
}

EingabeB:
  printf("Geben Sie bitte b ein");
  if(1==scanf("\n%d",&b))
  {
  printf("\n%d",b);     
}                                         
else
{   
  printf("\n Fehler! Nur Zahlen erlaubt",b);
  b=0;
  goto EingabeB; 
}

Hab's so gelöst, jedoch habe ich jetzt ein Problem mit dem GOTO. Der springt die ganze Zeit rum, und hält nicht bei der erneuten Abfrage von A bzw. B an.

Auch gelöst: fflush(stdin); (vor goto EingabeA und EingabeB, damit der Stream gelöscht wird, und dann klappts)
Ergänzung ()

Ich hab jetzt folgendes Problem entdeckt. Zwar gibt er einen Fehler aus, wenn man NICHTZAHLEN eingibt, aber sobald die Eingabe MIT einer ZAHL Beginnt akzeptiert er das, löscht die anderen NICHTZAHLEN raus - macht halt weiter.

Wie kann ich auch bei solche Fällen wie bei Eingabe von 21asdasdasdasd Fehler ausgeben lassen,
 
Zuletzt bearbeitet:
So, wie ich gesagt habe. Außerdem ist ein goto zwar ab und zu gerechtfertigt, hier aber nicht. Lies mal nach,
was while() macht.
 
Zurück
Oben