Ce face std::scanf
scanf este perechea de citire a lui printf. Primește un șablon cu marcaje (%d, %lf pentru double, %s pentru un cuvânt) și adresele variabilelor, cu &: scanf("%d", &x).
Returnează câte valori a citit cu succes. Compară rezultatul cu numărul așteptat ca să afli dacă intrarea a fost corectă. Textul din șablon care nu e marcaj trebuie să apară exact în intrare: "%d.%d.%d" citește o dată de forma 19.10.2026.
Este mai rapid decât std::cin în configurația implicită și apare des în programele de concurs, dar este mai ușor de folosit greșit.
Parametri
| Parametru | Descriere |
|---|---|
format |
Șablonul cu marcaje. |
... |
Adresele variabilelor (&x); pentru tablouri char, numele tabloului. |
Ce returnează
Numărul de valori citite cu succes, sau EOF dacă intrarea s-a terminat înainte de prima valoare.
Exemple
Exemplul 1: Citirea unei date
#include <cstdio>
int main() {
int zi, luna, an;
if (std::scanf("%d.%d.%d", &zi, &luna, &an) == 3) {
std::printf("Ziua %d, luna %d, anul %d\n", zi, luna, an);
} else {
std::printf("Format greșit\n");
}
}
Ce scrie utilizatorul (intrare)
19.10.2026
Rezultat
Ziua 19, luna 10, anul 2026
Exemplul 2: Nume, vârstă și medie
%19s citește un cuvânt de cel mult 19 caractere (plus '\0' în tabloul de 20); %lf este marcajul de citire pentru double.
#include <cstdio>
int main() {
char nume[20];
int varsta;
double medie;
int citite = std::scanf("%19s %d %lf", nume, &varsta, &medie);
std::printf("Valori citite: %d\n", citite);
std::printf("%s, %d ani, media %.2f\n", nume, varsta, medie);
}
Ce scrie utilizatorul (intrare)
Ana 21 9.45
Rezultat
Valori citite: 3
Ana, 21 ani, media 9.45
Greșeli frecvente
- Uiți
&:scanf("%d", x)trimite valoarea luixca adresă și scrie în memorie aleatorie. - Folosești
%sfără limită de lungime: un cuvânt mai lung decât tabloul îl depășește. Scrie mereu lățimea:%19spentruchar[20]. - Citești un
doublecu%f: lascanf,%fînseamnăfloat; pentrudoubleeste%lf.
Comenzi înrudite
std::printf: Afișează text formatat în stil C, cu marcaje precum %d, %s, %.2f.std::cin: Citește valori de la tastatură în variabile, cu operatorul >>.std::fopen: Deschide un fișier în stil C (fopen) și îl închide (fclose); lucrezi cu el prin FILE*.