CATEGORII DOCUMENTE |
Intrari cu format
Functiile de tip scanf() realizeaza conversiile de intrare cu format
a) Functia fscanf()
Forma acestei functii este:
int fscanf(FILE *fp, 'format', lista_argumente)
Functia fscanf() citeste din fisierul indirectat prin 'fp' sub controlul formatului 'format' si atribuie valorile citite argumentelor urmatoare, fiecare argument trebuind sa fie un pointer.
Functia intoarce EOF daca se detecteaza sfarsitul de fisier sau apare o alta eroare inainte de orice conversie. In caz contrar, functia intoarce numarul de elemente care au primit valori.
Sirul 'format' poate contine:
- specificatori de conversie, constand dintr-un caracter %, un caracter optional de suprimare a atribuirii; un numar optional care indica lungimea campului, un caracter optional h, l sau L, care indica lungimea argumentului si un caracter de conversie;
- spatii sau caractere HT sau VT care se ignora;
- caractere obisnuite (diferite de %) care indica urmatorul caracter diferit de caracterele albe cu care incepe fisierul de intrare.
Un camp de intrare se defineste ca un sir de caractere diferite de cele albe si se intinde pana la urmatorul caracter alb (spatiu, tab-uri, CR, LF, VT, FF).
Rezultatul conversiei unui camp de intrare este plasat in variabila indicata de argumentul corespunzator din lista de argumente.
Daca se indica suprimarea atributului prin '*' ca in %*s, campul de intrare este ignorat, fara a se face nici o atribuire.
Descriptorii de conversie utilizati in C pentru citire sunt:
%c - citeste un singur caracter; caracterele urmatoare sunt plasate in tablourile indicate, respectandu-se numarul de caractere indicat de lungimea campului; implicit este 1. Nu se adauga '0'.
%d - citeste un numar intreg zecimal.
%u - citeste un numar intreg zecimal fara semn.
%i - citeste un numar intreg (intregul poate fi octal, cu 0 la inceput, sau hexazecimal, cu 0x sau 0X la inceput).
%o - intreg octal (cu sau fara zero la inceput).
%x - intreg hexazecimal (cu sau fara 0x sau 0X la inceput).
%s - sir de caractere diferite de caracterele albe, indicand spre un tablou de caractere destul de mare pentru a memora sirul si caracterele terminator '0' care se va adauga.
%e, %f, %g - numere zecimale in virgula mobila.
%p - citeste valoarea pointerului.
%n - se scrie in argument numerele de caractere citite pana in acel moment. Nu se citeste nimic din intrare.
%h - citeste un intreg scurt.
Un caracter obisnuit in sirul 'format' determina ca functia fscanf() sa citeasca un caracter ce coincide cu cele din 'format'. De exemplu, '%d, %d' face ca fscanf() sa citeasca un intreg, apoi caracterul ',' si apoi un alt intreg. Daca calculatorul nu gaseste caracterul specificat, fscanf() va fi incheiata.
Toate variabilele menite sa primeasca valori prin fscanf() trebuie sa fie transmise prin adresele lor. Aceasta inseamna ca toate argumentele trebuie sa fie pointeri la variabilele utilizate ca argumente.
b) Functia scanf()
Forma functiei:
int scanf('format', lista-argumente)
Functia scanf() este echivalenta cu:
fscanf(stdin, 'format', lista-argumente)
Exemple:
scanf ('%d', &count); /* se citeste un intreg in variabila count */
scanf ('%s', address); /* se citeste un sir de caractere in vectorul address */
scanf ('%d %d', &r, &c); /* se citesc doua numere separate prin spatiu, tab sau linie noua */
Un * plasat intre % si caracterul de conversie, va suspenda atribuirea datei citite. Astfel, instructiunea :
scanf('%d%*c%d', &x, &y);
face ca, daca de la tastatura se introduce 10/20, 10 sa fie atribuit lui x, %*c este ignorat (nu este atribuit), iar 20 se atribuie lui y.
Instructiunea :
scanf('%20s', sir);
citeste nu mai mult de 20 caractere in variabila sir. Daca se introduce un sir de mai mult de 20 caractere, vor fi retinute numai primele 20, iar restul se pierd. Pentru caracterele ramase se poate apela din nou functia scanf() sub forma :
scanf('%s', sir);
care va plasa restul caracterelor tot in 'sir'.
Daca de la tastatura se introduce 10#20, instructiunea :
scanf('%s#%s', &x, &y);
va plasa 10 in x si 20 in y.
Instructiunea :
scanf('%s ', name);
nu se incheie decat daca dupa ultimul caracter se introduce un spatiu.
Exemplu de utilizare a functiilor fscanf si fprintf.
/* Acest program scrie date cu format cu printf intr-un fisier. Apoi foloseste fscanf pentru a citi datele din fisier */
#include <stdio.h>
FILE *stream;
void main( void )
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 779
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved