Typkontrolle
-
Hallo,
hab eine Funktion geschrieben, welche die Fakultät einer Zahl berechnet (Fakultät von 4 ist z.B: 1*2*3*4); Die Fakultät ist nur für ganze positive Zahlen definiert, und deshalb möchte ich nach dem einlesen der Zahl über if-Schleife eine Typkontrolle machen um sicherzustellen, dass die richtige Eingabe getätigt wurde.
case 'a': case 'A': printf("Bitte Zahl eingeben, um Fakultaet zu berechnen\n"); scanf("%ld", &zahl); if ((zahl<0) || (zahl != floor(zahl+0.5))) { printf("Nur positive ganze Zahlen!\n"); break; } else { ...... }
wenn die Zahl, die eingegeben wurde kleiner gleich 0 ist, oder die zahl ungleich der Zahl die aus floor(zahl+0.5) (gerundete Zahl) ist, dann soll eine Fehlermeldung ausgegeben werden, die darauf hinweist, dass nur positive ganze Zahlen erlaubt sind.
für negative zahlen funktioniert alles einwandfrei, bei -2 z.b. kommt die if schleife zum einsatz, jedoch wenn ich z.b. 2.2 eingebe berechnet das programm trotzdem das ergebnis und gibt keine fehlermeldung aus.
kann mir wer weiterhelfen, wo mein fehler liegt?
Dankeschön
-
Jetzt hast du die Definition von zahl nicht mit angegeben.
Wenn Zeile 4 richtig ist, ist zahl ein
long int
.Da hört scanf beim '.' auf, Zeichen einzulesen, weil der '.' nicht zu einem Ganzzahltyp passt.
Wenn du aber schon mit Ganzzahlen rechnest, dann nimm doch gleich ein
unsigned long
, da brauchst du auch keine Überprüfung.
-
http://www.c-plusplus.net/forum/p2057805#2057805
Dein Beitragstitel ist unpassend, in C gibt es keine Typkontrolle.
-
http://www.if-schleife.de/ , um die Formalitaeten einzuhalten.