[C] Problem z funkcją atoi()

mikku125
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 6 gru 2012, o 00:11
Płeć: Mężczyzna
Lokalizacja: Wrocław

[C] Problem z funkcją atoi()

Post autor: mikku125 »

Witam, jak wiadomo funkcja atoi zamieni nam chara na inta. Ogólnie rzecz biorąc.
Ale dzisiaj zostałem zagięty tak, że nie potrafię sobie z tym poradzić.
Funkcja atoi zwraca zero jeżeli parametr, który przyjmuje nie jest cyfrą.
Ok!
A co z zerem które wpisujemy do chara?
Jak te dwie sytuacje rozróżnić?

Kod: Zaznacz cały

char c[5];
int a;
scanf("%s",c); // c=0;
a=atoi(c);
if(a==0) printf("to nie jest cyfra, a moze jest 0?"); // ale przeciez jezeli do c wpiszemy 0 to mamy prawde!
dexter90
Użytkownik
Użytkownik
Posty: 391
Rejestracja: 11 lis 2011, o 09:48
Płeć: Mężczyzna
Pomógł: 32 razy

[C] Problem z funkcją atoi()

Post autor: dexter90 »

Gdy do funkcji atoi() dasz 0, to tak naprawdę przyjmuje ona NULL, a gdy przyjmuje NULL to logiczne, że zwróci 0. Ta funkcja konwertuje pojedyńcze znaki i zwraca Ci jakąś wartość. Na logikę sama z siebie nie jest w stanie wykryć "123abc", "abc", dlatego konwertuje znak po znaku "liczbę" , a to wszystko w kodzie ASCII. Stąd Twój problem.

Pozdrawiam.
royas
Użytkownik
Użytkownik
Posty: 363
Rejestracja: 24 sie 2012, o 09:27
Płeć: Mężczyzna
Lokalizacja: Cieszyn
Pomógł: 80 razy

[C] Problem z funkcją atoi()

Post autor: royas »

Użyj zmiennej errno.
Since these functions return 0 (zero), INT_MIN, INT_MAX, LONG_MIN,
LONG_MAX, and ULONG_MAX in the event of an error and these values are also
valid returns if the function is successful, applications should set errno
to 0 (zero) before calling these functions, and check errno after return
from the function. If errno is nonzero, an error occurred.
ODPOWIEDZ