Ce face atoi, atol și atof
atoi("42") întoarce 42. Funcția sare peste spațiile de la început, citește un semn opțional și cifrele, apoi se oprește la primul caracter care nu este cifră. atol întoarce long, iar atof întoarce un double (cu punct zecimal, ca în C).
Problema lor: nu spun dacă a apărut o eroare. atoi("abc") și atoi("0") întorc amândouă 0, iar un număr prea mare pentru int dă comportament nedefinit.
Sunt potrivite doar pentru date despre care știi că sunt corecte. Pentru intrări de la utilizator sau din fișiere, folosește strtol și strtod, care raportează unde s-a oprit citirea și depășirile.
Parametri
| Parametru | Descriere |
|---|---|
s |
Șirul care începe cu un număr. |
Ce returnează
Numărul citit sau 0 dacă la început nu este un număr.
Exemple
Exemplul 1: Conversii simple
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("%d\n", atoi("42"));
printf("%d\n", atoi(" -17 grade"));
printf("%d\n", atoi("12abc"));
printf("%d\n", atoi("abc"));
printf("%.2f\n", atof("19.99 lei"));
return 0;
}
Rezultat
42
-17
12
0
19.99
Exemplul 2: Suma numerelor din argumente text
#include <stdio.h>
#include <stdlib.h>
int main(void) {
const char *cantitati[] = {"3", "10", "7"};
long total = 0;
for (size_t i = 0; i < 3; i++) {
total += atol(cantitati[i]);
}
printf("Total: %ld bucăți\n", total);
return 0;
}
Rezultat
Total: 20 bucăți
Greșeli frecvente
- Folosești
atoipentru a verifica dacă utilizatorul a scris un număr: nu poți deosebi „0” de „ana”. - Scrii zecimale cu virgulă:
atof("19,99")dă 19, pentru că virgula oprește citirea (în localizarea implicită „C”).
Comenzi înrudite
strtol și strtod: Transformă text în număr și îți spune unde s-a oprit citirea și dacă valoarea a depășit limitele.scanf: Citește valori de la tastatură după un șablon (%d, %lf, %s) și le scrie la adresele primite; returnează câte valori a citit.fgets: Citește un rând întreg (cu tot cu spații) într-un tablou de caractere, fără să depășească dimensiunea dată.errno, perror și strerror: errno păstrează codul ultimei erori a unei funcții de bibliotecă; perror și strerror îl transformă într-un mesaj citibil.