Fehlerabfrage!
-
Wo hast Du denn da was geändert? Zeichen 47 und 58 werden immer noch als Ziffern interpretiert.
-
#include<stdio.h> int main() { char zeichen; int zahl; zahl = 0; do { zeichen = getchar(); if((zeichen < 48) || (zeichen > 57)) { printf("Eingegebenes Zeichen ist keine Zahl!"); } else { zahl = zeichen - 48; } } while(zahl != '\n'); return 0; }
sorry, habs im VS 2010 geändert aber nicht im board...
-
Und bau mal Deinen else-Zweig so um:
else { zahl = zeichen - 48; printf("\nEingegebenes Zeichen ist Zahl!"); }
-
Jetzt sieht's so aus:
#include<stdio.h> int main() { char zeichen; int zahl; zahl = 0; do { zeichen = getchar(); if((zeichen < 48) || (zeichen > 57)) { printf("Eingegebenes Zeichen ist keine Zahl!"); } else { zahl = zeichen - 48; printf("Eingegebenes Zeichen ist Zahl!"); } } while(zahl != '\n'); return 0; }
-
und dann mach mal hinter
zeichen = getchar();
die Anweisung:
printf("\n*****************\nEingegeben: %d\n", zeichen);
Merkst Du was?
-
Hinter "Eingegebenes Zeichen ist ....
solltest Du ein \n machen, der Übersichtlichkeit wegen.
-
Sorry, mekr da grad nicht so was das soll...
-
Ist die bestätigung mit Enter schuld?
-
Das ganze sieht jetzt so aus:
#include<stdio.h> int main() { char zeichen; int zahl; zahl = 0; do { zeichen = getchar(); //printf("\n*****************\nEingegeben: %d\n", zeichen); if((zeichen < 48) || (zeichen > 57)) { printf("Eingegebenes Zeichen ist keine Zahl! \n"); } else { zahl = zeichen - 48; printf("Eingegebenes Zeichen ist Zahl! \n"); } } while(zahl != '\n'); return 0; }
Wenn ich nun z.B. auf meinem Ziffernblock eine 5 drücke, bekomm ich als Ausgabe beide Meldungen! Ich verstehs echt nicht was da los ist...
-
Ja, Du kriegst doch nach Deinem eingegebenen Zeichen immer noch die 10 für die Enter-Taste.
-
Kannst ja mal anstelle von 5 eine Zahl mit mehr Ziffern eingeben, zB 5468 ... oder so.
-
Für (zeichen < 48) || (zeichen > 57) gibt es isdigit() aus der <ctype.h> bzw. die Negation davon.
Und das verlangt nicht mal ASCII.
-
Ich hab mit nachfolgenden Code mal versucht, dass ich mir das Return, also die 10, rausfilter. Aber irgendwie ist es mir nicht so gelungen. Die Return-Taste ist immer noch mitdabei!
#include<stdio.h> int main() { char zeichen; int zahl; zahl = 0; do { zeichen = getchar(); //printf("\n*****************\nEingegeben: %d\n", zeichen); if((zeichen < 48) || (zeichen > 57) || (zeichen == 10)) { printf("Eingegebenes Zeichen ist keine Zahl! \n"); } else { zahl = zeichen - 48; printf("Eingegebenes Zeichen ist Zahl! \n"); } } while(zahl != '\n'); return 0; }
-
Bei if((zeichen < 48) || (zeichen > 57) || (zeichen == 10)) liegt 10 doch schon bei < 48
-
#include<stdio.h> int main() { char zeichen; int zahl; zahl = 0; do { zeichen = getchar(); //printf("\n*****************\nEingegeben: %d\n", zeichen); if(zeichen == 10) continue; if((zeichen < 48) || (zeichen > 57)) { printf("Eingegebenes Zeichen ist keine Zahl! \n"); } else { zahl = zeichen - 48; printf("Eingegebenes Zeichen ist Zahl! \n"); } } while(zahl != '\n'); return 0; }
-
getchar liefert auch eigentlich ein int und kein char zurück
-
if ((zeichen < '0') || (zeichen > '9')) sollte es doch tun und hats in
Programmen von mir auch schon getan...