Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Intrarea formatata-scanf

c


Intrarea formatata-scanf

Functia scanf este intrarea analog printf-iesirea, admitind
aceleasi conversii in sens invers.

scanf(control, arg1, arg2,...)

scanf citeste caractere de la intrarea standard, le
interpreteaza conform formatului specificat in "control" si
memoreaza rezultatele in celelalte argumente, care sint pointere
ce indica unde vor fi depuse datele convertite.

Sirul de "control" contine de obiecei specificatii de
conversie, care sint utilizate pentru o interpretare directa
a secventelor de intrare. Sirul de control poate sa contina:

-blancuri, taburi, newlines" care sint ignorate (sint
numite "caractere albe")

-caractere ordinare (nu%)

-specificatii de conversie continind caracterul % si
optional caracterul de suprimare, un numar optional de
specificare a lungimii maxime a cimpului si un caracter
de conversie

O specificatie de conversie determina conversia urmatorului
cimp de intrare. Normal rezultatul este plasat in
variabila pointata de argumentul corespunzator. Daca se
indica suprimarea prin caracterul * oricum cimpul de la intrare
este ignorat 9se sare peste el) si nu se face nici o
retinere de spatiu. Un cimp de la intrare este definit ca un sir
de non "caracter alb " fie pina la lungimea specificata a
cimpului.

Caracterul de conversie indica interpretarea cimpului de la
intrare argumentul corespunzator trebuie sa fie un pointer asa
cum este cerut de semantica "C" limbajului "C". Urmatoarele
caractere de conversie sint legale:
d-un intreg zecimal este asteptat la intrare ;argumentul
corespunzator trebuie sa nu fie pointer intreg.

o-un intrteg octal este asteptat la intrare ;argumentul
corespunzator trebuie sa fie un pointer de intreg.

x-un intreg hexazecimal este asteptat la intrare ;
argumentul corespunzator trebuie sa fie un pointer de
intreg.

h-un intreg "short" este asteptat la intrare: argumentul
trebuie sa fie un pointer de intreg "short" ("scurt").

c-un singur caracter este asteptat ; argumentul
corespunzator trebuie sa fie un piinter de caracter. In
acest caz ignorarea "caracterelor albe " este suprimata ;
pentru a citi urmatoreul caracter altul de cit
"caracterele albe" se foloseste %1s.

s-un sir de caractere este asteptat ; argumentul
corespunzator trebuie sa fie un pointer al unui tablou de
caractere destul de mare pentru a incapea sirul si nun
terminator `0 care va fi adaugat.

f-un numar in virgula flotanta este asteptat
; argumentul corespunzator trebuie sa fie un pointer la
un cimp "float". Un caracter de conversie e este
sinonim cu f. Formatul prezentat la intrare pentru un
"float" este alcatuit dintr-un semn optional, un sir de
numere care pot sa contina si un punct zecimal si un
cimp de exponent care este format din E sau e urmat
de un intreg cu semn.

Caracterele de conversie d, v si x pot fi precedate de litera l
pentru a indica un pointer la "long" mai gdegraba decit
"int" care apare in list ta de argumente. Similar litera l
inainte de E sau f indica un pointer la "double" in lista de
argumente.

De exemplu:

int i;
float x;
char name[50];
scanf("%d%f%s", Di, Dx, name);

cu linia de intrare

25 54. 32E-1 Thompson

va asigna valoarea 25 lui i, 5. 432 luix si plaseaza sirul
"Thompson" terminat prin `0in "name". Cele trei cimpuri de la
intrare pot fi separate de orice blancuri, tab-uri si newline-uri.
Apelarea:

int i;
float x;
char name[50];
scanf("%2d%f%*d%2s, Di, Dx, name);

cu intrarea

56789 0123 45a72

va asigna lui i, 789. 0 lui x, va sari peste 0123 si plaseaza
"45" in "name". Urmatoarea apelare la orice rutina de introducere
va incepe cautarea cu litera a. In aceste doua exemple "name"
este deja un pointer si de aceea nu trebuie precedat de D.

Ca un alt exemplu, calculul rudimentar de la capitolul 4 poate fi
acum rescris cu scanf pentru a face conversia de intrare.

#include<stdio.h>
main() /* rudimentary desk calculator */


scanf se popreste cind se epuzeaza sirul de control ori cind
data de intrare difera prea mult de specificatia de control. Este
returnata o valoare egala cu numarul de date de intrare
introduse cu succes. La sfirsitul fisierului este returnat EOF ;
de observat ca acesta este diferit de 0 , ceea ce inseamna ca
urmatorul caracter de la intrare nu se mai converteste prin prima
specificatie din sirul de control. Urmatorul apel la scanf se
rezuma sa caute imediat dupa ultimul caracter deja returnat.

Un avertisment final: argumentele lui scanf trebuie sa fie
pointeri. De departe cea maiobisnuita eroare este sa scrii

scanf("%d", n);

in loc de

scanf("%d", Dn);




Document Info


Accesari: 1128
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )