Ce face std::atoi
std::atoi citește un număr întreg de la începutul textului, sărind peste spațiile inițiale și oprindu-se la primul caracter care nu face parte din număr. std::atof face același lucru pentru numere cu virgulă (cu punct zecimal).
Problema lor: dacă textul nu conține un număr, returnează 0, la fel ca pentru textul „0”, deci nu poți ști dacă a fost o eroare. Dacă numărul nu încape în int, comportamentul este nedefinit. În C++ modern folosește std::stoi/std::stod (aruncă excepții) sau std::from_chars.
Parametri
| Parametru | Descriere |
|---|---|
text |
Un șir C terminat cu '\0' (pentru std::string folosește s.c_str()). |
Ce returnează
Numărul citit sau 0 dacă nu s-a putut citi nimic.
Exemple
Exemplul 1: Ce citește atoi
#include <cstdlib>
#include <print>
int main() {
std::println("atoi(\"42\") = {}", std::atoi("42"));
std::println("atoi(\" -17 kg\") = {}", std::atoi(" -17 kg"));
std::println("atoi(\"12abc\") = {}", std::atoi("12abc"));
std::println("atoi(\"abc\") = {}", std::atoi("abc"));
std::println("atoi(\"0\") = {}", std::atoi("0"));
}
Rezultat
atoi("42") = 42
atoi(" -17 kg") = -17
atoi("12abc") = 12
atoi("abc") = 0
atoi("0") = 0
Exemplul 2: atof și argumentele din linia de comandă
Argumentele primite de main sunt texte C; aici le simulăm cu un tablou.
#include <cstdlib>
#include <print>
#include <string>
int main() {
const char* argumente[] = {"program", "3", "19.99"};
int bucati = std::atoi(argumente[1]);
double pret = std::atof(argumente[2]);
std::println("Total: {:.2f} lei", bucati * pret);
std::string text = "2.5e3";
std::println("atof(\"2.5e3\") = {}", std::atof(text.c_str()));
}
Rezultat
Total: 59.97 lei
atof("2.5e3") = 2500
Greșeli frecvente
- Validezi datele introduse de utilizator cu
atoi: „abc” devine 0 fără niciun semnal. Foloseștestd::stoiîntr-untrysaustd::from_chars. - Dai lui
atofun număr cu virgulă românească („19,99”): citește doar 19.
Comenzi înrudite
std::div: Calculează într-un singur apel câtul și restul împărțirii a două numere întregi.std::getenv: Citește valoarea unei variabile de mediu (de exemplu HOME sau PATH); returnează nullptr dacă nu există.std::stoi: Transformă un text în număr întreg (int, long, long long, unsigned long), cu excepții la erori.