Limbajul c si C++ abc-doar



Yüklə 4,6 Mb.
səhifə17/55
tarix07.05.2018
ölçüsü4,6 Mb.
#50260
1   ...   13   14   15   16   17   18   19   20   ...   55

#include

int x;

main()

{

printf("Introduceti consecutiv patru caractere : \n");

printf("(introduceti litera apoi tastati ENTER) \n");

for (x=0;x<8;x++)

{

getchar();

};

}
FUNCTIA putchar()

-introduce un caracter in dispozitivul de iesire

SINTAXA GENERALA este: int putchar(int c);

Functia introduce un caracter in fluxul de date standard stdout care este

de obicei asociat ecranului sau imprimantei(poate fi o placa I/O etc.)

Este definita la fel ca si putc(c,stdout) si este similara cu fputchar().

Dupa executie returneaza caracterul introdus,sau EOF in caz de eroare.

EXEMPLU: #include

#include

int x;

main()

{

for (x=64;x<164;x++)

{

putchar(x);

printf(" ");

};

sleep(7);

}

Observati ca in cadrul functiei caracterul ce va fi introdus in stream

este desemnat prin valoarea sa ASCII.Acest fapt prezinta avantaje deoarece

permite operatii algebrice asupra numarului ce desemneaza caracterul.


-115- [ stdin.h -putc() si getc() ]

FUNCTIA putc()

-introduce un caracter in stream(in fila deschisa)

SINTAXA GENERALA este: int putc(int c,FILE stream)

Functia introduce un caracter in fluxul de date deschis in acel moment,

spre deosebire de putchar() care introduce caracterul in fluxul stdout.

Se utilizeaza pentru a introduce date intr-o fila deschisa in memoria de

operare.Valoarea prin care se desemneaza caracterele este valoarea ASCII

a caracterului respectiv.Functia permite si operatii aritmetice cu valo-

rile numerice.Dupa executie returneaza caracterul scris sau EOF in caz de

eroare.Este similara cu fputc().

EXEMPLU: #include

#include

FILE *fila;

int x;

char y;

main()

{

fila=fopen("Pagina1.txt","w+");

for (x=20;x<60;x++)

{

putc(x*2,fila);

};

rewind(fila);

for (x=0;x<40;x++)

{

fread(&y,1,1,fila);

printf("%c",y);

sleep(1);

};

}
FUNCTIA getc()

-citeste un carcter din stream(din fila deschisa in memorie)

SINTAXA GENERALA este: int getc(FILE *stream)

Functia citeste primul caracter ce urmeaza dupa pozitia cursorului din

fila deschisa in memoria de operare si incrementeaza cu 1 pozitia acestuia

Functia returneaza caracterul citit,sau EOF in caz de eroare.

EXEMPLU: #include

#include

FILE *fila;

int x;

char y;

main()

{ fila=fopen("Pagina1.txt","w+");

fputs("Text pentru verificarea functiei getc !",fila);

rewind(fila);

for (x=0;x<40;x++)

{ y=getc(fila);

printf("%c",y);

sleep(1); }; }

ESTE similara cu fgetc().(pentru ver. 32 WIN,stdin trebuie redirectionat)

-116- [ stdio.h -getw() si putw() ]

FUNCTIA getw()

-citeste din memorie(stream) o valoare numerica binara de tip int

SINTAXA GENERALA este: int getw(FILE *stream)

Functia citeste din fila virtuala primul numar care urmeaza dupa pozitia

cursorului(numar binar int).Functia nu presupune nici un fel de aliniere

speciala,dar nu se utilizeaza pentru file deschise in mod text (chiar

daca acestea contin si caractere numerice).

Functia returneaza numarul citit iar la sfarsitul filei returneaza EOF.

Pentru eventuale erori se vor utiliza functiile feof() sau ferror().

Dupa citirea numarului pozitia cursorului va fi incrementata cu 1.

Pot apare incompatibilitati intre sisteme care ruleaza versiuni diferite

ale programului,deoarece tipul de date int este implementat diferit pe

platforme diferite (poate avea un format diferit).

EXEMPLU: #include

#include

FILE *numere;

int x;

int y;

main()

{ numere=fopen("Numar1.txt","wb+");

x=27677;

putw(x,numere);

rewind(numere);

y=getw(numere);

printf("\n Valoarea binara extrasa din memorie este: \n");

printf("%d\n",y);

printf("sau scrisa sub forma de adresa de memorie: ");

printf("%x",y);

sleep(5); }
FUNCTIA putw()

-introduce in memorie(stream) o valoare binara de tip int (vezi si getw)

SINTAXA GENERALA este: int putw(int w,*stream);

Functia scrie in fluxul desemnat prin stream valoarea numerica w. Functia

nu necesita conditii speciale de pozitionare a cursorului sau aliniere in

pagina.Numarul va fi scris la pozitia cursorului.In caz de reusita retur-

neaza valoarea specificata prin w iar in caz de eroare returneaza EOF.

EXEMPLU: #include

#include

FILE *numere;

int x,y;

main()

{ numere=fopen("Numar1.txt","wb+");

x=(7677*4)/3.14;

putw(x/5,numere);

rewind(numere);

y=getw(numere)/2.72;

printf(" \n Valoarea returnata este: \n");

printf("%d",y);

sleep(5); }

Observati ca functia permite operatii aritmetice si rotunjeste la intreg.


-117- [stdio.h -sprinf() ]

FUNCTIA sprintf()

-scrie date formatate intr-un sir (intr-o variabila de tip sir)

SINTAXA GENERALA este:

int sprintf(char *buffer,const char *format[,argument,...]);

Formatul datelor introduse se descrie la fel ca pentru functia printf().

Functia permite un numar mare de argumente,astfel incat sa se poata intro-

duce in sir date cu format diferit (caractere si numere),cu conditia ca

numarul specificatorilor de format sa fie egal cu cel al campurilor de

date introduse in sir.In cazul argumentelor multiple,primul specificator

de format se va atribui primului camp de date...si asa mai departe.

Daca functia a fost executata cu succes,returneaza numarul de bytes intro-

dusi in sir (fara caracterul null introdus la sfarsitul sirului),iar in

caz de eroare returneaza EOF.

Functia arhiveaza datele la adresa specificata prin buffer,in formatul

specificat prin format,preluate din campurile de date specificate prin

argument.

Limbajul C++ accepta si functia swprintf() care este stocata in

si opereaza doar cu majuscule(in rest este identica).

EXEMPLU: #include

#include

#include

char nrpi[80];

main()

{

sprintf(nrpi,"Valoarea aproximativa pentru PI este: %f",M_PI);

puts(nrpi);

sleep(7);

}

Sau pentru a introduce un sir de caractere:

EXEMPLU: #include

#include

#include

char text[80];

int z;

int main()

{

z=sprintf(text,"\n Numele clientului este: %s","ION IONESCU");

puts(text);

printf(" \n numarul de bytes introdusi este: ");

printf("%d",z);

sleep(7);

}
FUNCTIA sscanf()

-scaneaza si preia date formatate din interiorul unui sir (unei variabile)

SINTAXA GENERALA este:

int sscanf(const char *buffer,const char *format[,adress,...]);

unde: buffer -este adresa de stocare a datelor

format -este formatul datelor (precizat ca pentru printf())

argument -sunt adresele de la care se preiau datele

Formatul datelor se specifica la fel ca pentru printf(),fprintf() etc.


-118- [stdio.h - sscanf() ]

Functia se utilizeaza pentru a prelua date de la diverse adrese de memo-

rie(din constante sau variabile,campuri de date etc.).Functia citeste si

preia datele cu formatul specificat prin format de la adresele precizate

prin argument si le arhiveaza la adresa specificata prin buffer.Citirea

datelor se face pana la primul caracter nul,sau in functie de algoritmul

implementat.Functia poate contine un numar mare de argumente in cazul in

care preia date din mai multe campuri de date,dar in acest caz,pentru

fiecare camp de date citit trebuie sa se specifice distinct formatul in

care vor fi preluate datele.In cazul argumentelor multiple,datele conti-

nute la adresa specificata prin primul argument din lista vor fi citite

in formatul precizat prin primul specificator de format...si asa mai

departe pana la epuizarea argumentelor.

Citirea datelor de la o anumita adresa poate fi intrerupta de unul dintre

urmatoarele motive:

-aparitia unui caracter de suprimare (*) dupa cel de format (%),caz in

care datele vor fi scanate dar nu vor fi arhivate

-s-a epuizat numarul de caractere specificat spre a fi citite

-a intervenit un caracter cu alt format decat cel specificat

-a intervenit un caracter exceptat de la citire

-a intervenit caracterul EOF

-s-a epuizat tot sirul de caractere specificat

Daca functia a fost executata cu succes,returneaza numarul de campuri de

date citite,convertite la formatul specificat si arhivate.Valoarea retur-

nata nu include si campurile citite dar nearhivate (de exemplu "%*" )

In caz ca citirea se face la sfarsitul campului de date,functia returneaza

EOF,iar in caz de eroare returneaza zero.

Limbajul C++,accepta si functia swscanf() arhivata in ,care este

identica,dar opereaza doar cu majuscule (nu opereaza cu caractere hexa-

zecimale multibit si nici caracterele speciale destinate pentru compati-

bilitatea zonala specifice pentru alte limbi decat engleza).

EXEMPLU: #include

#include

char text[50]="Cluj-Napoca_Romania_cod_40045 data 07/07/2005";

char adresa[80];

int x;

main()

{

printf("\n Adresa extrasa este: \n");

sscanf(text,"%s",&adresa);

printf("%s",adresa);

printf("\n Numarul de adrese de memorie citite este: \n");

printf("%d",x);

sleep(7);

}
Acestea sunt functiile incluse in biblioteca de functii standard pentru

operatiile de intrare si iesire a datelor,continute in fila cu antetul

.Functiile prezentate reprezinta baza operatiilor de comunicare

cu calculatorul si sunt implementate (cu mici diferente) in toate versiu-

nile programului C.Pot fi combinate in diverse forme,pentru a forma rutine

sau macro-uri menite sa asigure operatiile de tip I/O (input/output).


-119- [ stdio.h - _popen() ]

BIBLIOTECA stdio.h Borland C++ 5.0

Limbajul C++ accepta toate functiile prezentate anterior,la care se

adauga suplimentar si functiile: _popen,_pclose,_fsopen,_fstrcpy,rmtmp,

setvbuf,vsscanf,spawnl,spawnle,spawnlp,spawnlpe,spawnv,spawnve,spawnvp,

spawnvpe,strncpy,tempnam,tmpnam,unget,vfscanf,vprintf,vscanf,vfprint,

tempfile,unlink,vfprint iar versiunea Visual C++ adauga si setmaxstdio.

Prezentarea completa a acestor functii,depaseste scopul propus de acest

manual(abecedar de programare),dar datorita faptului ca unele dintre ele

introduc concepte si utilitati complet noi,vor fi inventariate pe scurt.
FUNCTIA _popen()

-creaza o linie de adresa catre procesor (pipe) si executa o comanda

SINTAXA GENERALA este:

FILE *_popen (const char *command,const char mode)

unde: command -este comanda pentru procesor (care se va executa)

mode -este modul in care se va returna fluxul de date

Pentru mode se vor utiliza urmatoarele caractere:

"r" -procesul apelat poate citi comenzile cu ajutorul stream-ului

returnat de functie

"w" -procesul apelat poate scrie comenzile cu ajutorul stream-ului

returnat de functie

"b" -linia de adresa "pipe-line" se va deschide binar

"t" -linia de adresa "pipe-line" se va deschide in mod text

si respectiv combinatiile:rb,rt,wb si wt cu semnificatia corespunzatoare

Linia de adresa denumita "pipe" este o simulare virtuala a unei linii

reale de conexiune dintre memoria de operare si procesor.Aceasta linie

de adresa este asemanatoare cu un tampon de memorie,are efect doar in

memoria de operare si se utilizeaza pentru a transfera informatii intre

programe diferite(permite iesirea din spatiul de memorie rezervat pentru

program).Linia de adresa astfel formata,este asemanatoare si cu o fila

virtuala,in sensul in care are asociat un pointer si un descriptor sau

amandoua,poate fi citita sau poate scrie date utilizand functiile stan-

dard din biblioteca stdio.h,dar spre deosebire de filele obisnuite,linia

de conexiune(pipe-line) este un fragment de memorie temporara situat in

afara spatiului de memorie rezervat pentru program si este controlata

in exclusivitate de catre sistemul de operare.Principalul avantaj in re-

prezinta posibilitatea de a vehicula date in afara programului sau de a

a schimba si compara datele cu alte programe.Pentru crearea unei linii de

conexiune se poate utiliza si _pipe din .

Daca a fost executata cu succes,functia returneaza un pointer care

poate fi utilizat pentru a citi rezultatul executarii comenzii apelate,

sau pentru a scrie datele dorite si apoi executate de comanda apelata.

In caz de eroare,functia returneaza NULL.

Linia de conexiune(pipe-line) creata are doua capete.Pointerul returnat

va fi asociat cu unul dintre capete,iar celelalt capat va contine datele

preluate cu ajutorul comenzii apelate.In mod similar,unul dintre capete

poate fi utilizat pentru citire,iar celelalalt pentru scrierea datelor.

Executia comenzii apelate se va face asincron (serial).

Atentie:-in mediul Windows (Win 32 SDK) _popen returneaza un numar de fila

invalid care determina programul sa ramana in pauza timp nedefinit.(WIN32

utilizeaza pentru comunicatii portul paralel(sincron) in loc de serial).


-120- [ stdio.h - _fsopen() ]

EXEMPLU: #include

#include

#include

FILE *handle;

char message[256];

int status;

int main()

{

handle=_popen("dir *.c /on/p ","rt");

while (fgets(message,sizeof(message),handle))

{

fprintf(stdout,message);

}

sleep(5);

status=_pclose(handle);

sleep(3);

return(0);

}
FUNCTIA _pclose()

-inchide linia de conexiune si asteapta executarea comenzii

SINTAXA GENERALA este: int _pclose(FILE *stream);

Functia asteapta executia comenzii (executa cwait),apoi blocheaza ID

pentru comanda de procesor lansata de _popen si apoi inchide streamul

asociat liniei de conexiune(elibereaza memoria de operare).

Daca functia a fost executata cu succes,returneaza numarul de manipulare

al procesului executat(acelasi ca si pentru functia cwait),sau in caz de

eroare,returneaza -1.

Pentru exemplu vezi mai sus.

Cele doua functii: _popen si _pclose sunt utile pentru schimbul de date

cu alte programe (cel mai frecvent cu MS-DOS sub care opereaza C++).
FUNCTIA _fsopen()

-deschide un stream pentru o fila partajata in retea

SINTAXA GENERALA este:

FILE *_fsopen(const char *filename,const char *mode,int shflag);

Functia este asemanatoare cu fopen() cu diferenta ca specifica prin

constanta int shflag si modul de partajare al filei.Constantele pentru

specificarea shflag sunt definite in fila si sunt urmatoarele:

_SH_COMPAT -seteaza compatibilitatea cu aplicatiile pe 16 biti

_SH_DENYNO -permite accesul pentru citire si scriere

_SH_DENYRD -Nu permite citirea datelor

_SH_DENYWR -Nu permite scrierea datelor

_SH_DENYRW -NU permite citirea si nici scrierea datelor

_SH_DENYNONE -permite accesul atat pentru scriere cat si pentru citire

Functia deschide fila specificata prin filename,in modul specificat prin

mode(r,w,a,r+,w+,a+,b,t) si returneaza un pointer care poate fi utilizat

pentru identificarea filei virtuale in operatiile urmatoare.

Atentie:-sub DOS,partajarea filelor este ignorata daca lipseste SHARE.

Functia returneaza un pointer sau NULL in caz de eroare.

Pentru exemple vezi functia fopen() (aplicata la file partajate in retea)


-121- [stdio.h -strncpy() si rmtmp() ]

FUNCTIA strncpy() si _fstrncpy()

-copiaza un anumit numar de bytes dintr-un sir in altul si executa trun-

chierile sau completarile necesare

SINTAXA GENERALA este:

char *strncpy(char *dest,const char *src,size_t maxlen); si:

char far *far _fstrncpy(char far *dest,const char far *src,size_t maxlen);

unde: char *dest-este adresa de destinatie

char *src -este sirul sursa

maxlen -este numarul de caractere(bytes) ce va fi copiat

Daca sirul copiat este mai mic sau egal cu cel sursa,nu se va copia si

caracterul NULL de la sfarsitul sirului.Daca sirul copiat este mai lung

decat cel sursa,atunci va fi completat cu caractere NULL pana la lungimea

specificata(ocupa spatiul de memorie indicat).Daca se utilizeaza acelasi

sir atat ca sursa cat si ca destinatie,rezultatul este nedefinit.

In versiunea Borland C++,functia este inclusa in in timp ce in

alte versiuni (Turbo C,Visual C++ etc.) functia este inclusa in

Functia copiaza numarul de caractere precizat prin maxlen,din sirul

src(sursa) in sirul dest(destinatie) si returneaza sirul dest.

EXEMPLU: #include

#include

#include

int main()

{

char string[12];

char *str1="abcdefghi";

strncpy(string,str1,9);

printf("%s\n",string);

string[7]='9';

printf("%s\n",string);

sleep(5);

}
FUNCTIA rmtmp()

-sterge filele temporare

SINTAXA GENERALA este: int rmtmp();

Functia inchide si sterge din memorie toate filele temporare deschise in

momentul apelarii functiei,cele care au fost apelate anteror prin tmpfile.

Pentru ca functia sa poate fi utilizata este necesar ca directorul curent

sa fie acelasi cu cel in care s-au deschis filele,in caz contrar filele

nu vor putea fi inchise sau sterse.Functia returneaza numarul total de

file sterse din memorie. (vezi si tmpfile() )

EXEMPLU: #include

#include

FILE *fila1,*fila2;

int nr;

main()

{ fila1=tmpfile();

fila2=tmpfile();

nr=rmtmp();

printf("Numarul de file inchise este: %d",nr);

sleep(5); }


-122- [ stdio.h -spawnl() ]

FUNCTIILE spawn...()

-creaza si executa un subprogram (un nou process,o rutina).Este necesar sa

existe suficient spatiu in memorie pentru incarcarea si executia subpro-

gramului(se pot realiza procese inlantuite).

SINTAXA GENERALA este:

int spawnl(int mode,char *path,char *arg0,arg1,...,argn,NULL);

int spawnle(int mode,char *path,char *arg0,...,argn,NULL,char *envp[]);

Yüklə 4,6 Mb.

Dostları ilə paylaş:
1   ...   13   14   15   16   17   18   19   20   ...   55




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin