# [C]  es sollen nur ganze Zahlen eingelesen werden



## alphaChill (12. Oktober 2010)

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


```
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


----------



## Bratkartoffel (12. Oktober 2010)

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


----------



## deepthroat (12. Oktober 2010)

Hi.





alphaChill hat gesagt.:


> 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
> 
> 
> ...


Dann hast du etwas falsch gemacht. Zeige ein vollständiges (Minimal-) Programm.

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

Gruß


----------

