[C] es sollen nur ganze Zahlen eingelesen werden

alphaChill

Mitglied
Hallo all zusammen,

ich stehe vor folgendem Problem: Ich soll ein C-Programm schreiben, welches nur ganze Zahlen einlesen darf. Dazu habe mir die Funktion "scanf_s" mal etwas genauer angeschaut und so soll diese ja zurückliefern, ob ein Wert korrekt eingelesen wurde.
Für mich heißt das (was aber vermutlich nicht stimmt), dass wenn ich

Code:
int z;
int check = scanf_s("%i",&z);
dort stehen habe und nun ein "a" ein tippe, dass dann in "check" 0 stellen müsste... tut's allerdings nicht - es steht eine 1 drin :(

Nun frage ich mich, was die Funktion genau zurückgibt und welche Möglichkeiten ich noch habe die Eingabe auf Zahlen zu prüfen...
Würde ja die Eingabe in ein Array packen das Array durchlaufen und prüfen, ob in jedem Feld eine Ziffer steht, allerdings bräuchte ich dazu eine Funktion, wie in Java "charAt" halt nur für Intereger (also IntAt wäre cool ;-) ).

Gruß alphaChill
 
Hallo,

die Dokumentation zu der Funktion sagt folgendes:
Returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned. The return value is EOF for an error or if the end-of-file character or the end-of-string character is encountered in the first attempt to read a character. If format is a NULL pointer, the invalid parameter handler is invoked, as described in Parameter Validation. If execution is allowed to continue, scanf_s and wscanf_s return EOF and set errno to EINVAL.

Quelle: http://msdn.microsoft.com/de-de/library/w40768et(VS.80).aspx

Bei deinem Beispiel würde ich darauf tippen, dass er den Buchstaben "a" in das ASCII-Pendant 97 umwandelt, was ein gültiges Integer darstellt.

Gruß
BK
 
Hi.
ich stehe vor folgendem Problem: Ich soll ein C-Programm schreiben, welches nur ganze Zahlen einlesen darf. Dazu habe mir die Funktion "scanf_s" mal etwas genauer angeschaut und so soll diese ja zurückliefern, ob ein Wert korrekt eingelesen wurde.
Für mich heißt das (was aber vermutlich nicht stimmt), dass wenn ich

Code:
int z;
int check = scanf_s("%i",&z);
dort stehen habe und nun ein "a" ein tippe, dass dann in "check" 0 stellen müsste... tut's allerdings nicht - es steht eine 1 drin :(
Dann hast du etwas falsch gemacht. Zeige ein vollständiges (Minimal-) Programm.

@Bratkartoffel: ein a ist kein gültiger Integerwert.

Gruß
 
Zurück