Limbajul C dispune de set Ioarte bogat de Iunctii predeIinite, usor de manevrat, cea ce conIer limbajului o mare Ilexibilitate. Aceste Iunctii sunt grupate in Iunctie de scopul lor in mai multe categorii. Pentru a utiliza aceste Iunctii ele trebuie declarate in programul care le apeleaz. Pentru a degreva munca utilizatorului de astIel de declaratii aceste Iunctii au Iost introduse in Iisiere speciale care se vor include la nceputul programului. Aceste Iisiere poarta denumirea de Iisiere header si au extensia .h(de exemplu stdio.h). In aceste Iisiere header se aIl: - prototipurile Iunctiilor; - deIinitii de constante necesare acestor Iunctii; - structuri utilizate de copiator; - alte inIormatii Iolositoare.
Functiile din biblioteca C pot Ii grupate in urmtoarele categorii: - Iunctii pentru siruri si caractere aIlate in string.h~, ctype.h~ - Iunctii de intrare/iesire aIlate in stdio.h~ - Iunctii matematice aIlate in math.h~ - Iunctii de timp si data aIlate in time.h~ - Iunctii pentru alocarea dinamica aIlate in stdlib.h~ - Iunctii diverse aIlate in stdlib.h~ - Iunctii video pentru modul text aIlate in conio.h~ - Iunctii video pentru modul graIic aIlate in graphics.h~
10. 1. Func(ii pentru prelucrat caractere
Pentru utilizarea acestor Iunctii trebuie inclus in program Iisierul header ctype.h. Exista doua tipuri de Iunctii: - Iunctii de genul is... - Iunctii de conversie a literelor
Capitolul l0. Functii din biblioteca standard 2l6
10.1.1. Func(ii de genul is...
Dintre Iunctiile cel mai des Iolosite amintim:
a) #include <ctype.h> int isalnum(int ch); //prototipul Iunctiei
- returneaz o valoare diIerita de zero daca argumentul sau ch este o litera sau o ciIra, in caz contrar returneaz zero.
b) #include <ctype.h> int isalpha(int ch);
- returneaz o valoare diIerita de zero daca ch este o litera din alIabet si 0 in caz contrar.
c) #include <ctype.h> int sccntr(int ch);
- returneaz o valoare diIerita de zero daca ch este un ctrl, adic ch este intre 0h si 0x1Fh sau este egal cu 0x7Fh (DEL) si zero in celelalte cazuri.
d) #include <ctype.h> int isdigit(int ch);
-returneaza o valoare diIerita de zero daca ch este o ciIra (0 la 9) si zero in celelalte cazuri.
e) #include <ctype.h> int isgraph(int ch);
-returneaza o valoare diIerita de zero daca ch este orice caracter tipribil, diIerit de spatii si zero in celelalte cazuri. Caracterele tipribile se aIl in domeniul 0x21 si 0x7Eh.
I) #include <ctype.h> int islower(int ch);
- returneaz o valoare diIerit de zero dac ch este o liter mic si zero in celelalte cazuri.
Capitolul l0. Functii din biblioteca standard 2l7
g) #include <ctype.h> int isprint(int ch);
- returneaz o valoare diIerit de zero dac ch este un caracter tipribil incluznd si spatiul si zero n celelalte cazuri. Caracterele tipribile si spatiul liber sunt in domeniul 0x20 si 0x7E.
h) #include <ctype.h> int ispunct(int ch);
- returneaz o valoare diIerit de zero dac ch este un caracter de punctuatie, excluznd si spatiul si 0 n celelalte cazuri. Termenul "punctuatie" deIinit de aceast Iunctie include toate caracterele tipribile care nu sunt nici alIanumerice si nici spatii.
i) #include <ctype.h> int isspace(int ch);
- returneaz o valoare diIerit de zero dac ch este un spatiu, TAB, TAB VERTICAL, FORM FEED, CARRIAGE RETURN, NEW LINE si zero n caz contrar.
j) #include <ctype.h> int isupper(int ch);
- returneaz o valoare diIerit de zero dac ch este liter mare (A-Z) si zero n caz contrar.
k) #include <ctype.h> int isxdigit(int ch);
- returneaz o valoare diIerit de zero dac ch este o ciIr hexazecimal si zero n caz contrar.
10.1.2. Func(ii de conversie
a) #include<ctype.h> int tolower(int ch);
Capitolul l0. Functii din biblioteca standard 2l8 Functia returneaz litera mic echivalent a lui ch dac ch este liter, iar in caz contrar returneaz ch
b) #include <ctype.h> int toupper(int ch);
Functia returneaz litera mare echivalent a lui ch daca ch este o liter mic, n caz contrar returneaz chiar ch.
c) int _tolower(int ch);
Are eIect la Iel ca tolower(), dar rezultatul este imprevizibil dac ch nu este liter mare.
d) int _toupper(int ch);
Are eIect la Iel ca toupper(), dar rezultatul este imprevizibil daca ch nu este liter mic.
10. 2. Func(ii pentru prelucrarea yirurilor de caractere
Aceste Iunctii opereaz asupra sirurilor. De retinut c un sir in limbajul C se termin cu caracterul terminator '\0'. Operatiile pe aceste siruri se Iac pn la ntlnirea caracterului '\0' sau pe o lungime speciIicat (pe un anumit numr de octeti). Dac lungimea speciIicat este mai mare dect lungimea sirului operatiile se Iac numai pe lungimea sirului. Se utilizeaz Iisierul header string.h~ pentru manipularea sirurilor de caractere. Exist urmtoarele Iunctii:
strcat(); concateneaz sir strncat(); concateneaz n caractere la un sir strcpy(); copiaz un sir strncpy(); copiaz n caractere dintr-un sir strdup(); duplica un sir strchr(); caut un caracter intr-un sir strrchr(); caut ultima aparitie a unui caracter intr-un sir strstr(); caut subsir strcmp(); compara doua siruri
Capitolul l0. Functii din biblioteca standard 2l9 stricmp(); compara doua siruri Ir sa deosebeasc literele mari de literele mici strncmp(); compara n caractere din doua siruri strnicmp(); compara n caractere din doua siruri Ir sa deosebeasc literele mari de cele mici strlwr(); converteste sir la litere mici strupr(); converteste sir la litere mari strset(); initializeaz caracterele unui sir cu o valoare strnset(); initializeaz n caractere din sir cu o valoare strrev(); inverseaz caracterele unui sir strlen(); returneaz lungimea unui sir
1. strcat(), strncat () Sintaxa: char*strcat(char*dest,const char*sursa); char*strncat(char*dest,const char*sursa,size_t n); Scop: concateneaz doua siruri; Strcat() adaug sirul indicat de sursa la sirul indicat de dest si adaug apoi caracterul terminator null('\0'); returneaz un pointer la sirul rezultat (dest); strncat() adaug primele n caractere de la sirul indicat de sursa la sirul indicat de dest; daca n este mai mare dect lungimea sirului atunci se concateneaz numai sirul sursa (deci se concateneaz caractere din sirul surs la sirul destinatie pn se concateneaz n caractere sau pn se ajunge la sIrsitul sirului destinatie); returneaz un pointer la sirul rezultat (dest).
2. strcpy(), strncpy() Sintaxa: char*strcpy (char*s1, const char*s2); char*strncpy (char*s1, const char*s2, size_t n); Scop: strcpy copiaz sirul indicat de s2, inclusiv caracterul terminatorul de sir '\0', la adresa indicat de s1 si returneaz s1; strncpy copiaz n octeti din sirul indicat de s2 la adresa indicat de s1 si returneaz s1; dac n este mai mic dect lungimea sirului s2, caracterul null ('\0') nu se adaug automat la sirul copiat; dac este mai mare dect lungimea sirului s2, atunci se adaug caracterul null pn la completarea lungimii n; rezultatul este nedeIinit dac zona de memorie pentru sirul s1 se suprapune peste cea a sirului s2.
3. strdup() Sintaxa: char *strdup(char *s);
Capitolul l0. Functii din biblioteca standard 220 Scop: Iace o copie a unui sir; aloca spatiu de memorare pentru a copia sirul indicat de s si returneaz un pointer la adresa care contine copia sirului s; returneaz pointerul NULL dac nu poate aloca spatiu de memorare.
4. strchr(), strrchr(), strstr(); Sintaxa: char *strchr (const char *s, int c); char *strrchr(const char *s, int c); char *strstr (const char *s1, const char *s2); Scop: strchr returneaz un pointer la prima aparitie a caracterului c in sirul indicat de s (la primul octet din sirul indicat de s care este egal cu c); caracterul terminator '\0' este inclus n cutare; dac caracterul c nu este gsit se returneaz pointerul NULL; strrchr returneaz un pointer la ultima aparitie a caracterului c in sirul indicat de s; se returneaz pointerul NULL dac caracterul c nu este gsit; strstr returneaz un pointer la prima aparitie a sirului indicat de s2 n sirul indicat de s1; returneaz pointerul NULL dac sirul indicat de s2 nu este gsit in sirul indicat de s1;
5. strcmp(), stricmp(), strncmp(), strnicmp(); Sintaxa: int strcmp (const char *s1, const char *s2); int stricmp (const char *s1, const char *s2); int strncmp (const char *s1, const char *s2, size_t n); int strnicmp(const char *s1, const char *s2, size_t n); Scop: strcmp compar sirul indicat de s1 cu sirul indicat de s2 si returneaz o valoare care indic relatiile dintre ele: valoare semniIicatie 0 s1 s2 0 s1 identic cu s2 ~ 0 s1 ~ s2 strncmp compar, cel mult, primele n caractere din sirul indicat de s1 si sirul indicat de s2 si returneaz valoarea care indic relatiile dintre ele; stricmp si strnicmp compar cele doua siruri la Iel ca strcmp si strncmp dar nu Iac distinctia intre literele mici si literele mari;
6. strlwr, strupr ( conversi.c ); Sintaxa: char *strlwr(char *s); char *strupr(char *s); Scop: strlwr converteste literele mari din sirul indicat de s in litere mici; celelalte caractere rmn neaIectate;
Capitolul l0. Functii din biblioteca standard 22l strupr converteste literele mici din sirul indicat de s in litere mari; celelalte caractere rmn neaIectate; Valoare returnat: returneaz un pointer la sirul convertit.
7. strset(), strnset(); Sintaxa: char *strset (char *s, int c); char *strnset(char *s, int c, size_t n); Scop: strset initializeaz toate caracterele din sirul indicat de s cu caracterul c Ir a modiIica caracterul terminator de sir; strnset initializeaz cel mult n caractere din sirul indicat de s cu caracterul c; daca n este mai mare dect lungimea sirului atunci se utilizeaz lungimea sirului in loc de n; Valoare returnat: returneaz un pointer la sirul initializat.
8. strrev (); Sintaxa: char strrev(char *s); Scop: inverseaz ordinea caracterelor in sirul indicat de s; caracterul terminator '\0' rmne pe loc; Valoare returnat: returneaz un pointer la sirul inversat.
9. strlen(); Sintaxa: sizeoI strlen(const char *s); Scop: returneaz lungimea in octeti a sirului indicat de s; nu se include in lungime si caracterul terminator '\0'.
Exemple: a) #inlude<stdio.h> #include<string.h> void main(void) { char sir1[80],sir2[80]; printf("Introduceti primul sir"); gets(sir1); printf("Introduceti al doilea sir"); gets(sir2); strcat(sir1,sir2); printf("Sirul rezultat este=%s",sir1); }
Capitolul l0. Functii din biblioteca standard 222 b) #include<stdio.h> #include<string.h> void main(void) { char *px; p=strchr("Acesta este un text. ", (int) 'a'); printf(p); }
Categoriile de Iunctii matematice care au argumente de tip double si returneaz valori double, deIinite de ANSI C sunt: - Iunctii trigonometrice - Iunctii hiperbolice - Iunctii exponentiale si logaritmice - Iunctii diverse Toate aceste Iunctii cer Iisierul header math.h~
#include<math.h>
a) double acos(double arg); - retruneaz arccosinusul argumentului arg. Aceasta trebuie sa Iie in domeniul |-1,1|, in caz contrar apare o eroare.
b) double asin(double arg); - returneaz arcsinusul argumentului arg, argument care trebuie sa Iie in domeniul |-1,1|. Daca arg nu apartine acestui domeniu apare eroare de domeniu.
Capitolul l0. Functii din biblioteca standard 223 c) double atan(double arg); - returneaz arctangenta argumentului arg.
d) double atan2(double y, double x); - returneaz arctangenta Iunctiei y/x. Functia Ioloseste semnele argumentelor pentru a determina cadranul n care se aIla valoarea de retur.
e) double ceil(double num); - returneaz cel mai mic ntreg reprezentat ca double care este mai mare dect num. De exemplu ceil(1.02) va da 2.0, ceil(-1.32) va returna -1.0.
I) double cos(double arg); - returneaz cosinusul argumentului arg. Argumentul trebuie dat in radiani.
Exemplu. AIisarea lui x si a lui cos(x) pentru 0x45 cu pasul de 5 grade
. . . . . . int x=0; do { printf("x%d cos(%d)=%f\n",x,x, cos (double)(x*3.1419/180)) x+=5; } while (x<=45); . . . . . .
g) double cosh (double arg); - returneaz cosinusul hiperbolic al argumentului. Valoarea argumentului trebuie sa Iie exprimata in radiani
Exemplu. AIiseaz x si cosh de x pentru 0x45 cu pasul de 5 grade
. . . . . . int x=0; do { printf("cosh(%d)=%f\n",x,cosh((double)(x*3.14/180)); x+=5; }while(x<=45); . . . . . . .
h) double exp(double arg); - returneaz e la puterea arg, unde e2.71181282
Capitolul l0. Functii din biblioteca standard 224 i) double fabs(double num); - returneaz valoarea absoluta a argumentului nume
j) double floor(double num); - returneaz cel mai mare ntreg, reprezentat ca double, mai mic dect num. De exemplu . pentru 1.12 Iunctia va returna 1.0, iar pentru -1.31 va returna - 2.0.
k) double log(double num); - returneaz logaritmul natural al argumentului num. Daca num este negativ apare eroare de domeniu, iar daca este 0 apare eroare de reprezentare.
l) double log10(double num); - returneaz logaritmul in baza 10 al argumentului num. Daca num 0 eroare de domeniu, iar daca num0 atunci eroare de reprezentare.
m) double pow(double baza,double exp); - returneaz baza la puterea exponent. Daca baza este 0 si exponent0, apare eroare de domeniu. Acelasi lucru se ntmpla si cnd baza0 si exp nu este un ntreg. O depsire va produce eroare de reprezentare.
n) double sin(double arg); - returneaz sinusul argumentului arg. Argumentul trebuie sa Iie exprimat in radiani.
o) double sinh(double arg); - retruneaz sinusul hiperbolic al argumentului arg. Argumentul trebuie dat in radiani.
p) double sqrt(double num); - returneaz rdcina ptrata a argumentului num. Daca argumentul este negativ apare eroare de domeniu.
s) double tanh(double arg); - returneaz tangenta hiperbolica a argumentului arg, exprimat in radiani.
Capitolul l0. Functii din biblioteca standard 225 10.4. Func(ii de conversie date
Trebuie incluse n program Iisierele header math.h .si stdlib.h~.
10.4.1. Func(ii ce returneaz valoarea absoluta
a) int abs(int n); - returneaz valoarea absoluta a ntregului num.
Exemplu #include<stdlib.h> #include<stdio.h> int get_abs(void){ char num[40]; gets(num); return abs(atoi(num)); }
b) double fabs(double x); - argument real dubl precizie
c) long labs(long n); - returneaz valoarea absoluta a unui long int.
Exemplu . . . . . long int det_labs(void) { char num[60]; gets(num); return labs(atoll(num)); }
d) long double fabs(long double x); - argument Ilotant lung Functiile returneaz valoarea absoluta a argumentului.
Capitolul l0. Functii din biblioteca standard 226
10.4.2. Func(ii ce convertesc un yir ASCII intr-un numr
a) int atoi(char *sir); - converteste un sir ASCII intr-un numr ntreg TransIorm sirul de caractere punctat de str intr-o valoare ntreag. Sirul trebuie sa contin un numr ntreg corect. Daca acest lucru nu se ntmpla, Iunctia returneaz 0. Numrul ntreg in str poate Ii terminat prin orice caracter care nu poate Iace parte dintr-un numr ntreg , cum ar Ii spatiul liber, caractere de punctuatie, alte caractere. De exemplu daca Iunctia atoi() este apelata cu "213.67 STOP" va Ii returnat valoarea 213 iar 0.67 v-a Ii ignorata .
Exemplu. Program ce citeste doua numere ntregi , le aduna , le scade si le aIiseaz.
#include <stdio.h> # include <stdlib.h> void main(void) { char num1[40],num2[40]; printf("introduceti primul numar:"); gets(num1); printf("introduceti al doilea numar:"); gets(num2); printf("suma=%d, diferenta=%d\n",atoi(num1)+atoi(num2), atoi(num1)-atoi(num2)); }
b) double atof(char *sir); - converteste un sir ASCII intr-un numr real TransIorma sirul de caractere punctat de str intr-o valoare double. Sirul trebuie sa contin un numr Iloat valid. Daca acest lucru nu se ntmpla, Iunctia returneaz 0. Numrul poate Ii terminat prin orice caracter care nu poate Iace parte dintr-un numr Iloat, cum ar Ii spatiul de caractere de punctuatie (exceptnd punctul zecimal), alte caractere dect 'E' si 'e'. De exemplu daca atoI() este apelata cu "213.67 STOP" va Ii returnat valoarea 213.67.
Exemplu. Program ce citeste doua numere Iloat, le aduna, le scade si le aIiseaz.
#include <stdio.h> # include <stdlib.h> void main(void){ char num1[40],num2[40];
Capitolul l0. Functii din biblioteca standard 227 printf("introduceti primul numar:"); gets(num1); printf("introduceti al doilea numar:"); gets(num2); printf("suma=%f, diferenta=%f\n",atof(num1)+atof(num2), atof(num1)-atof(num2)); }
c) long atol(char *sir); - converteste un sir ASCII intr-un numr ntreg lung TransIorm sirul de caractere punctat de str intr-o valoare long int. Sirul trebuie sa contin un numr long int corect. Daca acest lucru nu se ntmpla, Iunctia returneaz 0. Numrul long int in str poate Ii terminat prin orice caracter care nu poate Iace parte dintr-un numr ntreg , cum ar Ii spatiul liber, caractere de punctuatie, alte caractere. De exemplu daca Iunctia atol() este apelata cu "213.67 STOP" va Ii returnat valoarea 213 iar 0.67 v-a Ii ignorata .
Exemplu. Program ce citeste doua numere long int , le aduna , le scade si le aIiseaz.
#include <stdio.h> # include <stdlib.h> void main(void){ char num1[40],num2[40]; printf("introduceti primul numar:"); gets(num1); printf("introduceti al doilea numar:"); gets(num2); printf("suma=%ld,diferenta=%ld\n",atol(num1)+atol(num2), atol(num1)-atol(num2)); }
d) long double atold(char *sir); - converteste un sir ASCII intr-un numr Ilotant lung
Functiile convertesc sirul de caractere numerice indicat de sir intr-un numr. Functiile citesc din sirul de intrare pn la primul caracter care nu e ciIra sau pn se ntlneste caracterul terminator de sir'\0'; spatiile si tab-urile sunt ignorate. Daca sirul nu poate Ii convertit se returneaz valoarea 0.
Capitolul l0. Functii din biblioteca standard 228 10.4.3. Func(ii ce convertesc un ntreg intr-un yir ASCII
a) char *itoa (int valoare, char *sir, int radix);
b) char *ltoa (long valoare, char *sir, int radix); char *ultoa(unsigned long valoare, char *sir, int radix); Functiile convertesc numrul valoare la un sir de caractere care se termina cu caracterul '\0' si l depune la adresa indicata de sir. Argumentul radix speciIic baza de numeratie a valorii. Daca radix este 10 si valoare este un numr negativ, primul caracter de la sirul convertit este semnul minus ("-"). Aceste Iunctii returneaz un pointer la sir.
10.4.4. Func(ii ce convertesc un numr flotant la un yir de caractere
char *gcvt(double valoare, int cifre, char *sir);
Argumentul valoare este numrul ce va Ii convertit la un sir de caractere si va Ii depus la adresa indicat de sir adugind si caracterul terminator de sir '\0'; se vor obtine attea ciIre semniIicative cte s-au dat prin argumentul ciIre.
10.5. Func(ii ce genereaz numere aleatoare
int rand(void); void srand(unsigned init); Functia srand initializeaz generatorul de numere aleatoare - pozitioneaz punctul de start pentru generarea unei serii de numere pseudoaleatoare; reinitializarea la valoarea implicita se Iace cu init egal cu 1; orice alta valoare pentru init initializeaz generatorul la un punct de start aleator. Functia rand returneaz un numr ntreg pseudoaleator in domeniul 0 - RANDMAX.
10.6. Func(ii pentru alocarea dinamic
Programele scrise in C pot stoca (memora) inIormatii in memoria operativa a calculatorului. Exist doua posibilitti: - utiliznd variabilele globale si locale, incluznd tablourile si structurile. In cazul variabilelor globale si al variabilelor locale statice, memoria este Iixat n
Capitolul l0. Functii din biblioteca standard 229 timpul compilrii. Pentru variabilele locale, memoria este alocat din spatiul rezervat stivei. Desi aceste variabile sunt eIicient implementate in C, ele reclam ca utilizatorul s cunoasc n avans cantitatea de memorie necesar pentru Iiecare situatie. - prin alocare dinamic. n acest caz, memoria este alocat prin aria de memorie liber, n Iunctie de necesitatile programului.
a) #include <stdio.h> void *calloc(size_t num, size_t size);
- returneaz un pointer ctre primul byte al memoriei alocate. Cantitatea de memorie alocat este egal cu num*size. Acest lucru Iace ca Iunctia calloc() s aloce suIicient memorie pentru un tablou ce contine num obiecte, Iiecare element avnd dimensiunea size. Dac nu exist memorie suIicient pentru a satisIace cererea de alocare, este returnat un pointer null. Este important a se veriIica valoarea de retur a Iunctiei nainte de a ncerca s Iolosim aceast cantitate de memorie.
Exemplu : Functie care returneaz un pointer ctre un tablou de 50 de elemente de tip Iloat, alocat dinamic:
- elibereaz memoria punctat de ptr. E necesar ca Iunctia Iree() s Iie apelat cu un pointer care a Iost obtinut anterior prin utilizarea uneia din cele doua Iunctii de alocare: malloc() sau calloc().
Capitolul l0. Functii din biblioteca standard 230 Exemplu. Program care aloc spatiu pentru un sir introdus de utilizator si apoi elibereaza spatiul: #include<stdio.h> #include<stdlib.h> void main(void){ char *sir[50]; int i; for(i=0;i<50;i++){ if sir[i]=(char*)malloc(128))==null){ printf("Eroare de alocare"); exit(0); } gets(sir[i]); /*elibereaza memoria*/ for(i=0;i<=100;i++) free(sir[i]); }
c) #include<stdlib.h> void *malloc(size_t size);
- returneaz un pointer ctre primul byte al zonei de memorie de dimensiune size care a Iost alocat de heap. Dac nu exist suIicient memorie n heap pentru a satisIace cererea, Iunctia malloc() returneaz un pointer null. Este indicat a se veriIica valoarea de retur a Iunctiei nainte de a ncerca sa se utilizeze memoria alocat. Exemplu. Functie pentru a aloca memorie suIicient pentru structuri de tip addr:
- modiIic dimensiunea unei zone de memorie alocat, punctat de ptr, la dimensiunea deIinit de size. Valoarea lui size poate Ii mai mare sau mai mica dect dimensiunea original. Functia realloc() returneaz un pointer ctre blocul de memorie alocat, deoarece poate Ii necesar mutarea blocului pentru a mri dimensiunea. Dac se produce mutarea blocului, continutul blocului este copiat n noul bloc Ir sa aib loc pierderi de inIormatii. Dac in heap nu exista suIicienta memorie liber pentru a aloca size bytes, Iunctia returneaz un pointer null si blocul original este eliberat (pierdut). Deci este necesar s se veriIice dac apelarea Iunctiei realloc() a Iost eIectuat cu succes.
Exemplu. Program care aloc memorie pentru 31 caractere, copiaz in spatiul alocat sirului "Memoria alocat are 31 caractere" si apoi Iolosind realloc() mreste dimensiunea zonei la 33 de caractere, pentru a adauga doua puncte(..) la sIrsit:
#include<stdlib> #include<string.h> #include<stdio.h> void main(void){ char *p; p=(char*)malloc[32]; if (!p){ printf("Eroare de alocare"); exit(1); } strcpy(p, "Memoria alocata are 31 caractere"); p=realloc(p,33); if(!p){ printf("Eroare de realocare"); exit(1); } strcat(p,".."); printf(p); free(p); }
Capitolul l0. Functii din biblioteca standard 232 10.7. Func(ii diverse
a) #include <stdlib.h> void abort(void);
- are ca eIect terminarea imediat a programului, dar nu nchide Iisierele deschise. Exemplu: #include<stdlib.h> #include<stdio.h> #include<conio.h> void main(void){ for( ; ; ) if(getche()=='A')abort(); }
b) #include<stdlib.h> void exit( int status);
- are ca eIect terminarea imediat a programului. Valoarea status este transIerat procedurii apelante, deci n mod uzual sistemului de operare. Prin conventie, dac status este zero, se presupune o terminare normal a programului. O valoare diIerit de zero poate Ii utilizat ca un indicator de eroare.
Exemplu
# include <stdio.h> # include<stdlib.h> char meniu(void){ char ch; do { printf("Enter (E)\n"); printf("Delete (D)\n"); printf("Print (P)\n"); printf("Quit (Q)\n"); } while (!strch("EDPQ", toupper(ch)); if(ch=='Q' ) exit(0); return ch; }
c) #include <stdlib.h>
Capitolul l0. Functii din biblioteca standard 233 int rand(void);
- genereaz o secvent de numere aleatoare. De Iiecare dat cnd este apelat se genereaz un ntreg ntre 0 si RANDMAX.. ConIorm ANSI C RANDMAX este 32767.