Citire cu format
Nume
scanf fscanf sscanf - citire cu format
Declaratie
int scanf(const char *format, );
int fscanf(FILE *flux, const char *format,
);
int sscanf(const char *str, const char
*format, );
Descriere
Familia de functii scanf scaneaza intrarea in concordanta cu sirul de caractere format dupa cum se descrie mai jos. Acest format poate contine specificatori de conversie; rezultatele unor astfel de conversii (daca se efectueaza) se memoreaza prin intermediul argumentelor pointer. Functia scanf citeste sirul de intrare din fluxul standard stdin fscanf din flux, si sscanf din sirul indicat de str
Fiecare argument pointer trebuie sa corespunda in ordine ca tip cu fiecare specificator de conversie (dar a se vedea suprimarea mai jos). Daca argumentele nu sint suficiente comportamentul programului este imprevizibil. Toate conversiile sint introduse de caracterul . Sirul format poate contine si alte caractere. Spatii albe (blanc, tab, sau new-line) din sirul format se potrivesc cu orice spatiu alb in orice numar (inclusiv nici unul) din sirul de intrare. Orice alte caractere trebuie sa se potriveasca exact. Scanarea se opreste atunci cind un caracter din sirul de intrare nu se potriveste cu cel din format. Scanarea se opreste de asemenea atunci cind o conversie nu se mai poate efectua (a se vedea mai jos).
Conversii
Dupa caracterul care introduce o conversie poate urma un numar de caractere indicatori, dupa cum urmeaza:
Suprima atribuirea. Conversia care urmeaza se face in mod obisnuit, dar nu se foloseste nici un argument pointer; rezultatul conversiei este pur si simplu abandonat.
h Conversia este de tip dioux sau n si argumentul asociat este un pointer la short (in loc de int
l Conversia este de tip dioux sau n si argumentul asociat este un pointer la long (in loc de int), sau conversia este de tip efg si argumentul asociat este un pointer la double (in loc de float
L Conversia este de tip efg si argumentul asociat este un pointer la long double
In completare la acesti indicatori poate exista o marime w maxima optionala pentru cimp, exprimata ca un intreg zecimal, intre caracterul si cel de conversie, si inaintea indicatorului. Daca nu este data o marime maxima se foloseste marimea implicita infinit (cu o exceptie la conversia de tip c); in caz contrar se scaneaza cel mult un numar de w caractere in timpul conversiei. Inainte de a incepe o conversie, majoritatea conversiilor ignora spatiile albe; acestea nu sint contorizate in marimea cimpului.
Sint disponibile urmatoarele conversii:
Potrivire cu un caracter . Cu alte cuvinte, in sirul format trebuie sa se potriveasca cu un caracter . Nu se efectueaza nici o conversie si nici o atribuire.
d Potrivire cu un intreg zecimal (eventual cu semn); argumentul asociat trebuie sa fie un pointer la int
i Potrivire cu un intreg (eventual cu semn); argumentul asociat trebuie sa fie un pointer la int. Valoarea intreaga este citita in baza 16 daca incepe cu 0x sau 0X, in baza 8 daca incepe cu , si in baza 10 in caz contrar. Sint folosite numai caracterele care corespund bazei respective.
o Potrivire cu un intreg octal fara semn; argumentul asociat trebuie sa fie un pointer la unsigned
u Potrivire cu un intreg zecimal fara semn; argumentul asociat trebuie sa fie un pointer la unsigned
x Potrivire cu un intreg hexazecimal fara semn; argumentul asociat trebuie sa fie un pointer la unsigned
f Potrivire cu un numar in virgula mobila (eventual cu semn); argumentul asociat trebuie sa fie un pointer la float
e g Echivalent cu f
s Potrivire cu o secventa de caractere diferite de spatiu alb; argumentul asociat trebuie sa fie un pointer la char, si zona trebuie sa fie suficient de mare pentru a putea primi toata secventa si caracterul terminator null. Sirul de intrare se termina la un spatiu alb sau la atingerea marimii maxime a cimpului (prima conditie intilnita).
c Potrivire cu o secventa de caractere de marime w (daca aceasta este specificata; prin lipsa se ia w 1); argumentul asociat trebuie sa fie un pointer la char, si zona trebuie sa fie suficient de mare pentru a putea primi toata secventa (nu se adauga terminator null). Nu se ignora ca de obicei spatiile albe din fata. Pentru a ignora mai intii spatiile albe se indica un spatiu explicit in format.
Potrivire cu o secventa nevida de caractere din setul specificat de caractere acceptate; argumentul asociat trebuie sa fie un pointer la char, si zona trebuie sa fie suficient de mare pentru a putea primi toata secventa si caracterul terminator null. Nu se ignora ca de obicei spatiile albe din fata. Sirul de intrare va fi format din caractere aflate in (sau care nu se afla in) setul specificat in format; setul este definit de caracterele aflate intre si . Setul exclude acele caractere daca primul caracter dupa este . Pentru a include caracterul in set, acesta trebuie sa fie primul caracter dupa sau ; caracterul aflat in orice alta pozitie inchide setul. Caracterul are si el un rol special: plasat intre doua alte caractere adauga toate celelalte caractere aflate in intervalul respectiv la set. Pentru a include caracterul acesta trebuie sa fie ultimul caracter inainte de . De exemplu, semnifica setul orice caracter cu exceptia pina la , si . Sirul se termina la aparitia unui caracter care nu se afla (sau, daca se precizeaza , care se afla) in set sau daca se atinge marimea maxima specificata.
p Potrivire cu o valoare pointer (asa cum se afiseaza cu %p in printf); argumentul asociat trebuie sa fie un pointer la pointer.
n Nu se prelucreaza nimic din sirul de intrare; in schimb, numarul de caractere consumate pina la acest punct din sirul de intrare este memorat la argumentul asociat, care trebuie sa fie un pointer la int
Valori returnate
Functiile returneaza numarul de valori atribuite, care poate fi mai mic decit numarul de argumente pointer, sau chiar zero, in cazul in care apar nepotriviri intre format si sirul de intrare. Zero indica faptul ca, chiar daca avem un sir de intrare disponibil, nu s-a efectuat nici o conversie (si atribuire); aceasta situatie apare atunci cind un caracter din sirul de intrare este invalid, cum ar fi un caracter alfabetic pentru o conversie %d. Valoarea EOF este returnata daca apare un eroare inainte de prima conversie, cum ar fi detectarea sfirsitului de fisier. Daca o eroare sau un sfirsit de fisier apare dupa ce o conversie a inceput, se returneaza numarul de conversii efectuate cu succes.
|