Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Intrarea formatata-scanf

c



+ Font mai mare | - Font mai mic



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);



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 984
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved