Scrigroup - Documente si articole

     

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


Conversii de format in memorie

c



+ Font mai mare | - Font mai mic



Conversii de format in memorie

Functiile scanf si printf au corespondente functiile sscanf si



sprintf care executa aceleasi tipuri de conversii, dar care

opereazza asupra unui sir nu asupra unui fisier. Formatul general

este:

sprintf(string, control, arg1, arg2,)

sscanf(string, control, arg1, arg2,)

sprintf formateaza argumentele arg1, arg2, etc, conform sirului

'control' ca mai inainte, dar plaseaza rezultatele in 'string'

in loc de iesirea standard. Desigur 'string' trebuie sa fie

suficient de mare pentru a primi rezultatul. Ca exempolu, daca

'name' este un tablou de caractere si n este un intreg, atunci:

sprintf(name, 'temp%d', n);

creaza un sir de forma tempnnn in 'name', unde nnn este valoarea

lui n.

sscanf face conversia inversa -imparte sirul 'string'

conform formatului din 'control' si plaseaza valorile

rezultate in arg1, arg2, etc. Aceste argumente trebuie sa fie

pointeri. Astfel: sscanf(name, 'temp%d', @n); n la valoarea

digitilor din sir care urmeaza dupa temp in 'name'.

Exercitiul 7.2. Rescrieti exemplul de calculator din

capitolul 4 utilizind scanf si/sau sscanf pentru a face intrarea

si conversia numerelor.

7.6 Acces la fisiere

Programele scrise pina acum toatecitesc intrarea standard si

scriu iesirea standard.

Urmatorul pas in I/O este de a scrie un program care acceeaza un

fisier care nu este deja conectat programului. Un program care

ilustreaza necesitatile pentru astfel de operatii este 'cat',

care conecteaza un set de fisiere specificate spre iesirea

standard. 'cat' este utilizat pentru tiparirea fisirelor la

terminal si ca un scop general este utilizat ca un colector de

intrare pentru programele care nu au capabilitatea de a accesa

fisirele prin nume. De exemplu comanda:

cat x. c y. c

tipareste continutul fisierelor x. c si y. c la iesirea standard.

Intrebarea este cum sa aranjam ca fisierele specigficate sa fie

citite adica cum sa controlam numele externe cu declaratiile care

de fapt citesc datele.

Regulile sint simple. Inainte de a se citi sau scrie intr-un

fisier, l trebuie deschis cu ajutorul functiei fopen din

biblioteca standard. fopen ia un nume extern (ca x. c sau y. c ),

face citeva manipulari si negocieri cu sistemul de operare(detalii

care nu ne intereseaza) si reruneaza un nume intern care

trebuie utilizat ulterior la citirile si scrierile fisireului.

Acest nume intern este de fapt un pijnter numit 'file pointer',

la o structura care contine informatii despre fisiere ca, adresa

unui buffer pozitia curenta in bufer, daca se citeste sau se

scrie in fisier, s. am. d. Utilizatorii nu trebuie sa cunoasca

detaliile deoarece o parte din definirile standard I/O

obtinutede la 'stdio.h' este o definire de structura numita

FILE. Singura declaratie necesara pentru un pointer de

fisier (file pointer) este exemplificata de

FILE*fopen(), *fp;

Aceasta spune ca fp este un pointer la FILE, si fopen returneaza

un pointer la FILE. Observati ca FILE este un nume de tip, la

fel cu 'int' nu o eticheta de structura: este implementat ca un

typedef(Detalii in capitolul 8).

Actuala apelare a lui fopen in program este:

fp=fopen(name, mode);

Primul argument a lui fopen este numele (name) fisierului, care

este un sir de caractere. Al doilea argument este modul

'mode', de asemenea un sir de caractere care indica cum se

intentioneaza sa fie utilizat fisier ul. Modurile permise sint

citire (read-'r'), scriere(write-'w') sau adaugare ('a').

Daca deschideti un fisier care nu exista: pentru scriere sau

adaugare, el este creat (daca este posibil). Daca se deschide

un fisier existent in scriere, acest fisier este sters.

Incercarea de a citi un fisier care nu exista constituie o

eroare. Mai exista si alte manevre care cauzea erori ca incercarea

de aciti un fisier pt. care nu aveti permisiunea. Daca exista

vreo eroare, fopen returneaza in pointerul nul valoarea NULL

(care pt. convenienta este de asemenea definita in stdio.h).

Urmatorul pas este de aciti sau scrie fisierul odata deschis.

Aici exista mai multe posibilitati dintre care getc si putc

sint cele mai simple. getc returneaza urmatorul caracter din

fisier ;are nevoie de fisier pentru a-i specifica care fisier.

Astefl

c=getc(fp)

plaseaza urmatorul caracter din fisierul referit prin fp in

c si EOF cind ajunge la sfirsitul fiserului.

putc este inversul lui getc:

putc(c, fp)

pune caracterul c in fisierul fp si returneaza c. La fel cu

getchar si puchar, getcsi putc pot fi macrouri in loc de functii.

Cind este demarat un program, trei fisiere sint deschise in mod

automat si sint furnizate pointerele pentru ele. Aceste fisiere

sint intrarea standard, iesirea standard, si iesirea

standard pentru erori ; pointerele de fisiere

corespunzatoare sint stdin, stdout si stderr. Normal toate

acestea sint conectate la terminal, dar stdin si stdout pot

fi redirectate asa cum s-a descris in paragraful 7.2.

getchar si putchar pot fi definite cu ajutorul lui getc si

putc, stdiu si stdout astfel:

#define getchar() getc(stdiu)

#define putchar(c)putc(c, stdout)

Pentru intrarea sau iesirea formatata afisierelor,

functiunile fscanf s si fprintf pot fi utilizate. Acestea sint

identice cu scanf si printf, de retinut ca primul argument, este

un pointer de fisier care specifica fisierul de citit sau scris ;

sirul de control este al doilea argument.

Cu aceste preliminarii, sintem acum in pozitia de a rescrie

programul 'cat' de concatenare a fisierelor. Premisa de baza

este cea care a fost gasita convenabila pentru atitea

programe pina acum: dacaexista linii de comanda cu argumente,

sint executate in ordine. Daca nu exista argumente este

preluata intrarea standard. Sub aceasta forma programul

poate fi folosit de sine statator sau ca o parte a unora mai

mari.

#include <stdio.h>

main(argc, argv) /* cat:concatenate files */

int argc;

char *argv[]

else

}

filecopy(fp) /*copy file fp to standard output */

FILE *fp

Pointerele de fisiere stdiu si stdout sint predefinite in

biblioteca standard I/O ca iesirea si intrarea standard: ele

pot fi utilizate oriunde poate fi utilizat un obiect de tipul

FILE, Ele sint constante , nu variabile asa ca nu incercati sa le

asigurati.

Functia fclose este inversul lui fopen ; ea intrerupe

conexiunea intre pointerul fisierului si numele extern al

fisierului, care a fost stabilita de fopen, eliberind pointerul

fisierului pentru un alt fisier. Deoarece cele mai multe sisteme

de operare limiteaza numarul de fisiere dechise simultan de un

program, este o idee buna de a le elibera in momentul cind nu

maio este nevoie de ele, asa cum am facut in programul cat.

Exista de asemenea un alt motiv pentru a face fclose pe un alt

fisier in iesire -curata bufferul in care putc colecteaza

iesirea. fclose este apelat automat pentru fiecare fisier

dechis atunci cind programul se termina normal.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 851
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