0% au considerat acest document util (0 voturi)
58 vizualizări30 pagini

Programare În C

Acest document discută despre funcții în programarea C. Definirea funcțiilor se referă la grupuri de instrucțiuni care îndeplinesc o sarcină specifică. Funcțiile permit împărțirea codului unui program în mod logic în sarcini separate și reutilizabile. O declarație de funcție specifică numele funcției, parametrii și tipul de retur. Funcțiile oferă avantaje precum evitarea codului duplicat și îmbunătățirea organizării și reutilizabilității programului. Documentul oferă exemple de diferite tipuri de funcții, în funcție de faptul dacă au parametri, valori de retur sau ambele. De asemenea, explică definițiile, declarațiile și apelurile funcțiilor.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
58 vizualizări30 pagini

Programare În C

Acest document discută despre funcții în programarea C. Definirea funcțiilor se referă la grupuri de instrucțiuni care îndeplinesc o sarcină specifică. Funcțiile permit împărțirea codului unui program în mod logic în sarcini separate și reutilizabile. O declarație de funcție specifică numele funcției, parametrii și tipul de retur. Funcțiile oferă avantaje precum evitarea codului duplicat și îmbunătățirea organizării și reutilizabilității programului. Documentul oferă exemple de diferite tipuri de funcții, în funcție de faptul dacă au parametri, valori de retur sau ambele. De asemenea, explică definițiile, declarațiile și apelurile funcțiilor.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

UNITATE - IV

Funcț ie în C
Ne referim la o funcț ie ca la un grup de declaraț ii diferite care îndeplinesc împreună o sarcină. Orice program C
pe care îl folosim are cel puț in o funcț ie, care este main(). Apoi, programele pot defini multiple funcț ii suplimentare.
funcț ii într-un cod.

Utilizarea funcț iei în C


Un program C poate fi uș or împărț it în mai multe funcț ii separate. Cum ne împărț im resursele disponibile
Codul conform diferitelor funcț ii disponibile depinde în totalitate de noi. Dar diviziunea ar trebui să aibă loc.
logic în aș a fel încât fiecare funcț ie să fie capabilă să îndeplinească o sarcină specifică.
Declaraț ia funcț iei informează compilatorul despre numele funcț iei, parametrii ș i valoarea de returnare.
tip. Cu alte cuvinte, definiț ia funcț iei ajută la oferirea corpului efectiv al oricărei funcț ii pe care o
vrea într-un program/cod.
Putem de asemenea să ne referim la funcț ii ca la o subrutină, o metodă sau o procedură într-un program. Standardul
biblioteca în limbajul C le oferă utilizatorilor funcț ii încorporate variate pe care programele respective le pot utiliza
apel. De exemplu, putem folosi funcț ia strcat() pentru a concatena două ș iruri, copiaț i locaț ia de
o memorie într-o altă locaț ie a memoriei folosind funcț ia memcpy() ș i multe altele.

Avantajele utilizării funcț iilor în programarea C


Funcț iile din limbajul de programare C ne oferă următoarele avantaje:

• Când folosim funcț iile, putem evita cu uș urinț ă rescrierea aceluiaș i cod.
logic de fiecare dată ș i din nou de mai multe ori în orice program.

• Apelarea funcț iilor C poate apărea de un număr oricât de ori dorim în orice program.
Ș i putem face asta din orice loc din programul care ne este dat.
• Putem realiza urmărirea unui program C mare destul de uș or dacă îl împărț im în diverse
funcț ii.
• Una dintre realizările principale ale funcț iilor C este reutilizabilitatea.
• Cu toate acestea, aminteș te-ț i că apelarea funcț iei acț ionează întotdeauna ca o suprasarcină în cazul unui C
program.

Definirea unei funcț ii în C


Definiț ia funcț iei, în general, are această formă în limbajul de programare C:
tip_retur nume_funcț ie( listă_parametru ) {
funcț ia corp
}
Definiț ia funcț iei în limbajul de programare C conț ine un corp de funcț ie ș i un antet de funcț ie.
Să aruncăm o privire asupra tuturor părț ilor din care constă o funcț ie:

• Numele funcț iei − Denotă numele actual al oricărei funcț ii pe care o folosim în textul dat
Codul. Numele ș i parametrul unei funcț ii constituie împreună o semnătură a funcț iei în cod.
• Corpul funcț iei - Consistă dintr-o colecț ie a tuturor declaraț iilor. Acestea oferă o definiț ie a
ce va face funcț ia în cod.
• Parametrii - Este ca un loc rezervat. Ori de câte ori invocăm o funcț ie, transmitem o valoare către
parametrul disponibil. Facem referire la această valoare ca la un argument sau un parametru efectiv. Facem referire
la lista de parametri ca numărul, ordinea ș i tipul funcț iei din cod. Parametrii
poate fi opț ional. Asta înseamnă că orice funcț ie într-un cod poate să nu aibă deloc parametri.
• Tip de returnare - Putem obț ine o valoare înapoi pentru o funcț ie. Termenul tip de returnare se referă la
tipul de date al valorilor întoarse pe care le obț inem din funcț ii (returnările funcț iilor). Unele dintre funcț ii
sunt de asemenea capabili să efectueze orice operaț iune dorită fără a primi o valoare în schimb pentru aceasta. În
în orice astfel de caz, cuvântul cheie folosit pentru return_type va fi void.

Sintaxa funcț iei Aspecte ale Funcț iei

tip_returnare nume_functie (lista_argumente) {corp_functie;} Definiț ia funcț iei

numele_funcț iei (lista_argumentelor) Apel de funcț ie

tip_returnare nume_funcț ie (lista_argumente); Declaraț ia funcț iei

Sintaxa funcț iei


Iată sintaxa pe care o folosim pentru a crea o funcț ie în limbajul de programare C:
tip_returnare nume_funcț ie(tip_date parametru...)
{
// cod executabil în c
}

Exemplu
Aici, am dat un cod sursă mai jos pentru funcț ia max(). Funcț ia max() ia două dintre
parametrii - mai exact val1 ș i val2. Apoi returnează valoarea maximă care este prezentă între ambele.
pe ei. Să aruncăm o privire:
/* funcț ia returnează maximul dintre două valori */
int max(int val1, int val2) {
/* declaraț ia variabilei locale */
int rezultat;
dacă (val1 > val2)
rezultat = val1;
altfel
rezultat = val2;
returnează rezultatul;

Tipuri de Funcț ii
Limbajul de programare C are funcț ii care sunt de următoarele tipuri:

• Funcț ii definite de utilizator – Acestea sunt tipurile de funcț ii pe care le putem crea folosind C
programator astfel încât să putem să-l folosim de mai multe ori. Această funcț ie reduce complexitatea
orice program mare - ș i astfel, optimizează codul dat.
• Funcț ii de bibliotecă–Acestea sunt funcț iile a căror declaraț ie apare în fiș ierele de antet ale C,
cum ar fi floor(), ceil(), outs(), gets(), printf(), scanf(), etc.

Valoare de Returnare

Orice funcț ie în programarea C poate să nu returneze valoarea sa din nicio funcț ie. În caz că nu avem nevoie
pentru a returna valoarea care este disponibilă în orice funcț ie, putem folosi voidul sub forma unui return
tip. Să ne uităm la un exemplu de funcț ie C care nu returnează o valoare din
funcț ie disponibilă.
Să ne uităm la un exemplu de funcț ie C care nu are valoare de întoarcere:
void ciocolata()
{
printf("ciocolată c");
}
În cazul în care dorim să returnăm o valoare dintr-o funcț ie disponibilă, trebuie să folosim oricare dintre datele
tipuri, cum ar fi char, long, int, etc. Astfel, tipul de returnare depinde total de valoarea care trebuie returnată
din funcț ia disponibilă. Vom examina un exemplu de funcț ie C care va returna o valoare int
din funcț ia dată.
Exemplu de funcț ie C cu valoare de retur int,
int obtine()

{
returnează 20;

}
În exemplul menț ionat mai sus, încercăm să returnăm valoarea 20, iar tipul de date, în acest caz, este
int. Dacă suntem dispuș i să ne întoarcem la valoarea punctului flotant (exemplu, 64,5, 7,9, 27,61, etc.), atunci
trebuie să folosim float-ul sub forma tipului de returnare al metodei.
float get()
{
returnează 83.7;

}
Aici, trebuie să apelăm o funcț ie astfel încât să obț inem valoarea funcț iei.

Apelarea Funcț iilor – Diferite Aspecte


Funcț iile disponibile într-un cod pot accepta un argument sau nu îl pot accepta deloc. Astfel, este posibil ca...
returnează orice dintre valori sau poate să nu o facă. Pe baza acestor fapte, apelurile funcț iei au
următoarele patru aspecte:

• O funcț ie care nu are argumente ș i nu are valoare de întoarcere.


• O funcț ie care nu are argumente, dar are o valoare de returnare.
• O funcț ie care are argumente, dar nu are valoare de returnare.
• O funcț ie care are argumente ș i de asemenea are o valoare de returnare.
Exemplu de o funcț ie care nu are argumente ș i nu are valoare de întoarcere,
#include<stdio.h>
void printNume();
void main ()
{
printf("La revedere ");

printName();
}
void printName()
{
printf("Kiddo");
}
Ieș irea generată de acest program ar fi:
Pa, micuț ule
Exemplu de funcț ie care nu are argumente, dar are o valoare de întoarcere,
#include<stdio.h>
int sum();
void main()
{
printează("Prin calcularea suprafeț ei pătratului dat\n");
float arie = patrat();
printf("Suprafaț a pătratelui dat va fi: %f\n", area);
}
int patrat()
{
float latură;
printf("Lungimea laturii pătratului în metri va fi: ");
scanf("%f", &side);
returnare latură * latură;

}
Ieș irea generată de acest program ar fi:
Prin calcularea ariei pătratului dat
Lungimea laturii pătratului în metri va fi: 10
aria pătratului dat va fi: 100.000000

Exemplu de funcț ie care are argumente, dar nu are valoare de returnare.


#include<stdio.h>
void suma(int, int);
void main()
{
int x,y,rezultat;
Calculul sumei a două valori:
Introducerea a două valori:
scanf("%d %d",&x,&y);
sum(x,y);
}
void suma(int x, int y)
{
printf(" Suma celor două valori este %d",x+y);
}
Ieș irea generată de acest program ar fi:
Calculul sumei a două valori:
Introducerea a două valori 58
62
Suma celor două valori este 120

Exemplu de funcț ie care are argumente ș i are ș i o valoare de returnare,


#include<stdio.h>
int suma(int, int);
void main()
{
int x, y, rezultat;

Calcularea sumei a două valori:


Introducerea a două valori:
scanf("%d %d",&x,&y);
rezultatul = suma(x,y);

Suma este: %d
}
int suma(int x, int y)
{
returnează x+y;

}
Ieș irea generată de acest program ar fi:
Calculul sumei a două valori:
Introducerea a două valori: 49
51
Suma este: 100

Declaraț ie de Funcț ie
Definiț ia funcț iei spune practic unui compilator despre numele funcț iei ș i cum poate fi apelată.
această funcț ie. Apoi putem defini corpul efectiv al acestei funcț ii separat.
Există următoarele părț i care exist în o declaraț ie de funcț ie:
tip_retur nume_functie(lista_parametrii);
Pentru funcț ia definită mai sus, care este max(), declaraț ia funcț iei va apărea în următorul mod:
int max(int val1, int val2);
Numel din parametrii nu sunt atât de importanț i în cazul declaraț iei funcț iei - avem nevoie doar de ai lor.
tip. Astfel, declaraț ia menț ionată mai jos va fi de asemenea valabilă:
int max(int, int);
Cerem doar declaraț ia funcț iei atunci când definim acea funcț ie într-un fiș ier sursă în timp ce
încă apelăm acea funcț ie într-un fiș ier separat. În orice astfel de caz, trebuie să declarăm acea funcț ie foarte
partea de sus a fiș ierului care apelează acea funcț ie.

Apelarea unei funcț ii


Când creăm o funcț ie în programarea C, practic oferim acelei funcț ii o definiț ie de
ce trebuie să facă. Dar pentru a folosi această funcț ie, trebuie să apelăm această funcț ie pentru a-ș i îndeplini sarcina definită.

Când o funcț ie este apelată de un program, funcț ia apelată va primi controlul programului transferat.
pentru ea. Funcț ia apelată va efectua o sarcină definită. Odată ce executăm declaraț ia return sau
când ajunge la acolada de închidere a finalizării funcț iei, este obligat să returneze controlul programului la
programul principal.
Pentru a apela o funcț ie, trebuie doar să trecem parametrii necesari pentru aceasta, împreună cu numele ei.
funcț ia. Aici, dacă funcț ia se dovedeș te a returna o valoare, atunci putem păstra cu uș urinț ă valoarea returnată
stocat cu noi.
De exemplu -
#include <stdio.h>
/* declaraț ia funcț iei */
int max(int val1, int val2);
int main () {
/* definiț ia variabilei locale */
int x = 400;
int y = 500;
int ret;
/* apelul funcț iei pentru a obț ine o valoare maximă */

ret = max(x, y);


printf( "Valoarea maximă este : %d\n", ret );
return 0;
}
/* funcț ia returnează maximul între două valori */
int max(int val1, int val2) {
/* declaraț ia variabilei locale */
int rezultat;
dacă (val1 > val2)
rezultatul = val1;

altfel
rezultat = val2;
returnează rezultatul;

}
Ieș ire
În acest caz, am păstrat funcț ia max() împreună cu funcț ia main(). După aceea, am efectuat
compilarea codului sursă. Rularea executabilului final ar produce rezultatul că
urmează:
Valoarea maximă este: 500

Argumente de funcț ie
Când o funcț ie trebuie să folosească argumentele, trebuie să declare acele variabile care se întâmplă să accepte
valorile argumentelor. Astfel de variabile sunt cunoscute ca parametrii formali ai funcț iei date.
Parametrii formali se comportă exact ca orice alte variabile locale în cadrul funcț iei noastre date. Aceș tia
parametrii sunt creaț i când intră într-o funcț ie. După aceea, sunt distruș i când ies.
În timpul apelului unei funcț ii, vor exista două moduri în care putem efectua transmiterea acestora.
argumente pentru o funcț ie dată:

Tip de
Descrierea tipului de apel
Apel

Apel prin Metoda Call by Reference creează o copie a adresei argumentului dat în
Face ț i referire la parametrul care este formal în natură. Între aceste func ț ii, utilizarea adresei ajută la
accesând argumentul actual care este folosit în acest apel. Aceasta înseamnă că modificările
care apar pe parametru sunt legate de a afecta argumentul dat.

Apel prin Metoda Call by Value creează o copie a valorii actuale a argumentului dat în
Valoare parametrul funcț iei care este de natură formală. Aici, schimbările care apar pe
parametrul (care există în interiorul funcț iei) nu are niciun efect asupra
argument disponibil.
Programarea C, prin default, este apelul prin valoare pentru trecerea argumentelor. În general, înseamnă
că nu putem folosi codul care există într-o funcț ie pentru a modifica argumentele care ajută
în apelarea funcț iei.

Funcț ii de bibliotecă în C
Funcț iile de bibliotecă din limbajul de programare C sunt funcț iile încorporate care sunt grupate împreună
ș i apoi plasat într-un loc comun cunoscut sub numele de bibliotecă. Folosim funcț iile bibliotecii pentru a
efectuează un tip specific de operaț ie. De exemplu, funcț ia de bibliotecă printf ajută la imprimarea pe
console. Designerii unui compilator creează funcț iile bibliotecii. Definirea tuturor funcț iilor din biblioteca standard
funcț iile în C apar în mai multe fiș iere header care sunt salvate folosind extensia .he
Un utilizator trebuie să includă astfel de fiș iere de antet în programul său pentru a utiliza funcț iile bibliotecii care există.
în acele fiș iere de antet. De exemplu, dacă dorim să facem uz de funcț iile din biblioteca scanf/printf, atunci
trebuie să includem fiș ierul de antet stdio.h în programul nostru. Acest fiș ier de antet conț ine toate funcț iile bibliotecii.
care se referă la ieș irea/introducerea standard.

Iată o listă cu câteva dintre fiș ierele de antet care sunt utilizate cel mai mult în programarea C:

Antet Descrierea fiș ierului header


fiș ier

conio.h Este un tip de fiș ier header pentru ieș irea/introducerea pe consolă.

stdio.h Este un tip standard de fiș ier de antet de ieș ire / intrare. Acest fiș ier de antet constă din toate biblioteca
funcț ii care sunt legate de ieș irea/introducerea standard.

stdlib.h Este un tip de fiș ier header care constă din diverse funcț ii generale de bibliotecă, cum ar fi exit()
calloc(), malloc(), etc.

string.h Acest fiș ier de antet constă din toate funcț iile bibliotecii care sunt legate de ș iruri, cum ar fi puts(),
gets(), etc.

timp.h Este un tip de fiș ier antet care constă din toate funcț iile legate de timp.

math.h Este un tip de fiș ier header care constă din toate funcț iile care sunt legate de matematică.
operaț iuni, cum ar fi pow(), etc.

stdarg.h Folosim acest fiș ier de antet pentru a defini funcț iile cu argumente variabile.

ctype.h Este un tip de fiș ier header care constă din caracterele care gestionează funcț iile.

setjmp.h Este un tip de fiș ier header care constă în toate funcț iile care sunt funcț ii de salt.

signal.h Folosim acest fiș ier header pentru a defini orice funcț ie de manipulare a semnalelor dată.

errno.h Acest tip de fiș ier de antet constă din toate funcț iile de gestionare a erorilor.

locale.h Este un tip de fiș ier antet care constă în toate funcț iile de localizare.

assert.h Este un tip de fiș ier header care constă în toate funcț iile de diagnostic.

Care sunt diferitele aspecte ale apelurilor de funcții?


Funcț iile disponibile într-un cod pot accepta un argument sau pot să nu-l accepte deloc. Astfel, este posibil să
returnaț i orice dintre valorile sau poate să nu o facă. Pe baza acestor fapte, apelurile funcț iei au
următoarele patru aspecte:

• O funcț ie care nu are argumente ș i nu are valoare de întoarcere.


• O funcț ie care nu are argumente, dar are o valoare de retur.
• O funcț ie care are argumente, dar nu are valoare de returnare.
• O funcț ie care are argumente ș i, de asemenea, are o valoare de returnare.

De ce trebuie să declarăm o funcț ie într-un program?


Definiț ia funcț iei îi spune practic unui compilator despre numele funcț iei ș i cum poate fi apelată.
această func ț ie. Apoi putem defini corpul efectiv al acestei func ț ii separat.
Acolo sunt aceș tia următoarele piese că exista în a funcț ie declaraț ie
tip_returnare nume_functie(liste_parametru);

Care este importanț a apelării unei funcț ii?


Când creăm o funcț ie în programarea C, practic oferim acelei funcț ii o definiț ie de
ce trebuie să facă. Dar pentru a folosi această funcț ie, trebuie să apelăm această funcț ie pentru a-i îndeplini sarcina definită.

Când o funcț ie este apelată de un program, funcț ia apelată va primi controlul programului transferat.
la ea. Funcț ia apelată va efectua o sarcină definită. Odată ce executăm declaraț ia de returnare sau
când ajunge la acolada de închidere a funcț iei, este obligat să returneze controlul programului
la programul principal.
Pentru a apela o funcț ie, trebuie doar să transmităm parametrii necesari pentru aceasta, împreună cu numele ei.
funcț ia. Aici, dacă funcț ia întâmplător returnează o valoare, atunci putem salva cu uș urinț ă valoarea returnată
stocate la noi.
Nesting-ul funcț iilor
Limbajul C permite de asemenea imbricarea funcț iilor, adică utilizarea/apelarea unei funcț ii în interiorul alteia.
corpul funcț iei. Trebuie să fim atenț i în timp ce folosim funcț ii imbricate, deoarece aceasta poate duce la
la cuibărit infinit.
functie1()
{
// corpul funcț iei 1 aici
function2();
// corp funcț iei 1 aici
}
Dacă funcț ia function2() are, de asemenea, un apel pentru function1() în interiorul ei, atunci în acest caz, va duce la un
întrebări infinite. Ei se vor suna unii pe alț ii ș i programul nu va înceta niciodată.
Nu reuș eș ti să înț elegi? Să presupunem că în interiorul funcț iei main() se află funcț ia function1()
apelat ș i execuț ia sa începe, apoi în interiorul function1(), avem un apel pentru function2(), aș a că
controlul programului va trece la function2(). Dar, deoarece function2() are de asemenea un apel la
function1() în corpul său, va apela function1(), care va apela din nou function2(), ș i aceasta
va continua la infinit, până când ieș iț i forț at din execuț ia programului.
Recursie în C
Recursia este procesul care apare atunci când o funcț ie apelează o copie a sa pentru a lucra asupra ei.
o problemă mai mică. Orice funcț ie care se apelează pe sine este numită funcț ie recursivă, iar o astfel de funcț ie apelează
se numesc apeluri recursive. Recursia implică un număr mai multor apeluri recursive. Cu toate acestea, este
este important să impui o condiț ie de terminare a recursiei. Codul de recursie este mai scurt decât codul iterativ
cu toate acestea, este dificil de înț eles.

Recursia nu poate fi aplicată tuturor problemelor, dar este mai utilă pentru sarcinile care pot fi definite
în ceea ce priveș te subtask-urile similare. De exemplu, recursia poate fi aplicată sortării, căutării ș i traversării
probleme.
În general, soluț iile iterative sunt mai eficiente decât recursia, deoarece apelul funcț iei este întotdeauna o suprasarcină.
Orice problemă care poate fi rezolvată recursiv, poate fi de asemenea rezolvată iterativ. Cu toate acestea, unele probleme
sunt cele mai potrivite pentru a fi rezolvate prin recursie, de exemplu, turnul din Hanoi, seria Fibonacci, factorialul
găsire, etc.

#include <stdio.h>
int fact (int);
int main()
{
int n,f;
printf("Introduceț i numărul al cărui factorial doriț i să-l calculaț i?");
scanf("%d",&n);
f = fact(n);
printf("factorial = %d", f);
}
int fact(int n)
{
dacă (n==0)
{
return 0;
}
altfel dacă ( n == 1)
{
returnează 1;
}
altfel
{
return n*fact(n-1);
}
}
Ieș ire
Introduceț i numărul al cărui factorial doriț i să-l calculaț i? 5

factorial = 120

Structură ș i Uniune
O structură ș i o unire în C pot fi transmise prin valoare funcț iilor ș i returnate prin valoare de funcț ii.
structură, putem trece seturi complete de înregistrări la orice funcț ie folosind un singur parametru. Uniunea este
folosit atunci când trebuie să foloseș ti aceeaș i locaț ie de memorie pentru doi sau mai mulț i membri de date.

Ce este structura ș i unirea în C?


Structura este containerul definit în C pentru a stoca variabile de date de diferite tipuri ș i suportă, de asemenea,
stocarea variabilei definite de utilizator. Pe de altă parte, Unia este, de asemenea, un tip similar de recipient în C
care poate de asemenea să conț ină diferitele tipuri de variabile împreună cu variabilele definite de utilizator. O structură
conț ine un grup ordonat de obiecte de date. Spre deosebire de elementele unui array, obiectele de date dintr-o
structura poate avea tipuri de date variate. Fiecare obiect de date dintr-o structură este un membru sau un câmp. O uniune este
un obiect similar cu o structură, cu excepț ia faptului că toț i membrii săi încep de la aceeaș i locaț ie în
memorie.
▪ Structura: Structura este o aranjare ș i organizare a elementelor interrelaț ionate într-un material
obiect sau sistem, sau obiectul sau sistemul astfel organizat. Structura este un tip de date definit de utilizator.
în limbajul C care ne permite să combinăm date de tipuri diferite împreună. Ajută la construirea
date complexe.
▪ Uniune: O uniune este o clasă a cărei membri de date sunt mapati la aceeaș i adresă în interiorul său.
Obiect. O uniune este un tip de date special disponibil în C care permite stocarea diferitelor date.
tipuri în aceeaș i locaț ie de memorie.
Structura C este o colecț ie de tipuri de date diferite care sunt grupate împreună, iar fiecare element dintr-o C
structura se numeș te membru. Dacă doriț i să accesaț i membrii structurii în C, variabilele structurii ar trebui să
a fi declarat. În structura membru ș i structură în C, fiecărui membru îi este atribuită o memorie unică
locaț ie, în timp ce în Uniune toț i membrii de date împărtăș esc o locaț ie în memorie.
În structuri, schimbarea valorii unui membru de date nu afectează ceilalț i membri de date în
structura în care modificarea valorii unui membru de date afectează valoarea altuia
membri de date. În structura membru, o structură poate stoca valori multiple ale diferitelor membri
în timp ce într-o structură în C, o unie stochează o singură valoare deodată pentru toț i membrii săi. Totalul unei structuri
dimensiunea este suma dimensiunii fiecărui membru de date ș i în structură în C

Difference between Structure and Union in C on the basis of keyword, memory, value altering,
accesarea membrilor ș i iniț ializarea membrilor.

Structură Uniune

Cuvântul cheie unire este folosit pentru a defini o Cuvântul cheie struct este definit ca o structură
uniune.

Uniunea este egală cu dimensiunea celei mai mari Mai mare sau egal cu suma dimensiunilor
membru. membrii săi.

Memoria alocată este partajată de fiecare individ Fiecare membru dintr-o structură este atribuit
membrii uniunii. o zonă de stocare unică a locaț iei.

Modificarile valorii oricăruia dintre membri Modificarea valorii unui membru nu va


va altera valorile altor membri. afectează alț i membri ai structurii.
Numai un membru poate fi accesat la o
timp

Numai primul membru al uniunii poate fi Mai mulț i membri ai unei structuri pot fi
iniț ializat. iniț ializat imediat.

Sintaxa declarării unei structuri


▪ struct Persoană { char nume[50]; int citNo; float salariu; }; Aici, un tip derivat struct
Persoana este definită. Acum poți crea variabile de acest tip.
struct angajat /* Define o variabilă de structură numită temp */
{
char nume[20];
int id;
clasă lungă;
} temp;

Structura angajatului are trei membri: nume, id și clasă. Membrul nume este un 20-
element array, iar id și clasa sunt membri simpli cu tipurile int și long, respectiv.
identificatorul angajat este structura identificator.

Sintaxa declarării uniunii


Angajat de sindicat
{
int varsta;
char nume[50];
float salariu; };

Aici, un tip derivat uniune persoană este definit.

semn de uniune /* O definiție și o declarație */


{
int svar;
svar nesemnat;
} număr;
Acest exemplu definește o variabilă unională cu tip de semn și declară o variabilă numită număr care
are doi membri: svar, un întreg semnat, și uvar, un întreg nesemnat. Această declarație permite
valoarea curentă a unui număr care trebuie stocată fie ca o valoare semnată, fie ca o valoare nesemnată. Eticheta
asociat cu acest tip de uniune este un semn.

Avantajele Structurii ș i Uniunii în C


În Structuri ș i Uniuni în C,
▪ Structură creș tere a productivităț ii,

▪ Structura în C elimină multe povara atunci când lucrăm cu înregistrări care con ț in
elemente de date heterogene, sporind astfel productivitatea. Mentenan ț a codului: utilizând
structură, reprezentăm înregistrări complexe folosind un singur nume, ceea ce face codul
menț inerea ca un vânt.
În Structuri ș i Uniuni în C,
▪ Uniunea ocupă mai puț in spaț iu în memorie comparativ cu structura.

▪ Când foloseș ti un union, doar ultima variabilă poate fi accesată direct. Union este folosit atunci când
trebuie să foloseș ti aceeaș i locaț ie de memorie pentru doi sau mai mulț i membri de date. Îț i permite să reț ii
datele unui singur membru de date.

Dezavantajele Structurii ș i Uniunii în C


Următoarele sunt dezavantajele Structurii ș i Uniunii în C
▪ Într-o unire poț i folosi doar un singur membru al uniunii odată.

▪ Toate variabilele de unire nu pot fi iniț ializate sau utilizate cu valori variate în acelaș i timp.

▪ Uniunea atribuie un spaț iu comun de stocare pentru toț i membrii săi.

▪ Structura este mai lentă deoarece necesită spaț iu de stocare pentru toate datele.

▪ Dacă complexitatea unui proiect IT depăș eș te limita, devine greu de gestionat.


▪ Schimbarea unei structuri de date într-un cod necesită modificări în multe alte locuri. Prin urmare,
schimbările devin greu de urmărit.
Unde ș i de ce folosim Structura ș i Uniunea în C
Foloseș ti o unire atunci când „lucrul” tău poate fi unul dintre multe lucruri diferite, dar numai unul în acelaș i timp.
foloseș te o structură atunci când „lucrul” tău ar trebui să fie un grup de alte lucruri.

O structură este un tip de date definit de utilizator disponibil în C, care permite combinarea elementelor de date diferite.
tipuri. În structuri ș i uniuni în C, structurile sunt utilizate pentru a reprezenta un registru. O uniune este un tip de dată special
tip disponibil în C care permite stocarea diferitelor tipuri de date în aceeaș i locaț ie de memorie.

Structură
▪ Este utilizat în principal pentru stocarea diferitelor tipuri de date

▪ Ocupă spaț iu pentru fiecare membru scris în parametrii interni


Uniune
▪ Este folosit în principal pentru stocarea uneia dintre numeroasele tipuri de date disponibile.

▪ Ocupa spaț iu pentru un membru având cea mai mare dimensiune scrisă în parametrii interni.

Accesarea membrilor structurii în C


1. Elementele unui array sunt accesate folosind variabila Subscript, în mod similar, membrii unei structuri sunt
accesat folosind operatorul punct [.]
2.(.) este numit „Operator de membru de structură”.
3. Folosi ț i acest operator între „numele structurii” ș i „numele membrului”

Declararea variabilei de structură împreună cu declaraț ia structurii


Sintaxă

structname/tag
{
//membrii structurii

} variabile;

Exemplu

structcar
{
charname[100];
preț flotant
} maș ină1;

Declararea unei variabile de structură folosind cuvântul cheie struct.

Sintaxă

variabile structname;
Exemplu

structcar
{
charname[100];
preț plutitor
};
structcar ma ș ina1, ma ș ina2, ma ș ina3;

Iniț ializarea membrilor structurii


Putem iniț ia direct membrii structurii, ca mai jos,
Exemplu
structcar
{
charname[100];
preț flotant
};
xyz
987432,50

structura masina car1={"xyz",987432.50};

Exemplu

#include<stdio.h>

intmain()
{
structcar
{
[100]
preț float
};

Benz
987432,50
structcar car1={"xyz",987432.50};

//tipărirea valorilor folosind operatorul punct (.) sau 'operatorul de acces la membri'

printf("Numele maș inii = %s\n", [Link]);


printf("Preț ul maș inii = %f\n",[Link]ț );

return0;

Ieș ire
Benz
Preț ul maș inii = 987432.500000
Compararea a două structuri
Compararea structurilor în C nu este permisă pentru a verifica sau compara direct cu operatori logici.
Numai structură membri pot fii comparable cu logic operator.

Îmi place
struc_object_1.varsta == struc_object_2.varsta
Program

#include<stdio.h>
#include<conio.h>
struct student {
int rno;
char nume[20];
int procentaj;
};
void main()
{
clrscr();
//compara structură prin membri
struct student stu1 = {1001,"Ramesh",87};
struct student stu2 = {1002,"Arun",85};
dacă ([Link] < [Link]) {
%s are note mai mari.
}
altfel {
%s are note mai mari.
}
}

Rezultatul
Ramesh are note mai mari.

Array de structuri în C
Un tablou de structuri în C poate fi definit ca o colec ț ie de multiple structuri
variabile în care fiecare variabilă conț ine informaț ii despre entităț i diferite. Array-ul
structurile în C sunt folosite pentru a stoca informaț ii despre multiple entităț i de diferite tipuri de date
tipuri. Array-ul de structuri este, de asemenea, cunoscut sub numele de colecț ia de structuri.

Exemplu de un array de structuri care stochează informaț ii despre 5 studenț i ș i le afiș ează.
#include<stdio.h>
#include <string.h>
structstudent{
număr de interior

charname[10];
};
intmain(){
inti
structstudent st[5];
printf("Introduceti inregistrarile a 5 studenti");

pentru(i=0;i<5;i++){
Introduceti numarul de inregistrare:

scanf("%d",&st[i].rollno);
Introduceț i Numele:
scanf("%s", &st[i].name);
}
Lista informaț iilor studenț ilor:
pentru(i=0;i<5;i++){
printf("\nNumăr de ordine:%d, Nume:%s",st[i].rollno,st[i].name);

}
return0;
}

Introduceț i înregistrările a 5 studenț i

Introduceț i numărul de înregistrare: 1

Introduceti numele
Introduceț i numărul de rol: 2

Introduceț i numele: Ratan

Introduceț i numărul de rol:3

Introduceti numele
Introduceț i numărul de înmatriculare: 4
Introduceț i numele: James

Introduceti numarul de inregistrare:5

Introduceț i numele: Sarfraz

Array în interiorul structurii

Uneori, array-urile pot fi membri într-o structură, această situaț ie este cunoscută sub numele de array-uri în interior
Structura. Accesarea array-urilor din interiorul structurii este similară cu accesarea altor membri.

Scopul unui aranjament în cadrul unei structuri

Când te găseș ti să stochezi o valoare ș ir, atunci trebuie să alegi un tablou în interior.
structură. deoarece numele tău se încadrează doar în tipul de date caracter, astfel că tabloul este
capabil de a stoca date de acelaș i tip de date.
Program C - Array în interiorul structurii

#include <stdio.h>
int main()
{
struct student {
char nume[30];
int numar_de_rol;

} stud;
Introdu numărul tău de înmatriculare :

scanf ("%d",&[Link]);
Introduceț i-vă numele:
scanf ("%s", [Link]);
Număr de ordine : %d Nume : %s
return 0;
}
Introduceti numarul dumneavoastra de inregistrare: 16

Introduceț i numele dvs.: Abi

16
Abi
Herestudact ca un obiect pentru un student de structură, astfel încât să ne fie posibil să accesăm orice.
membru în interiorul unui student folosind obiectul nostru stud.

Structură în structură (sau) Structuri înghesuite


O structură în interiorul unei alte structuri se numeș te structură încuviș ată.

Consideraț i următorul exemplu,


struct emp{
int eno;
char ename[30];
float sal;
float da;
float hra;
float ea;

Toate articolele care intră sub indicaț ii pot fi grupate împreună ș i declarate sub o
sub–structură după cum este arătat mai jos.

struct emp{
int eno;
char ename[30];
float salariu;

struct alocaț ie{


float da;
float hra;
float ea;
}a;
}e;
Membrul cel mai interior dintr-o structură înn nesting poate fi accesat prin schimbarea tuturor
variabilele structurii preocupate (de la exterior la interior) cu membrul folosind
operator punct
UNITATEA - V

Punctoare C

Pointerul în limbajul C este o variabilă care stochează adresa unei alte variabile. Această variabilă poate
să fie de tip int, char, array, funcț ie sau orice altă zonă de memorie. Dimensiunea pointerului depinde de
arhitectură. Totuș i, în arhitectura pe 32 de biț i, dimensiunea unui pointer este de 2 octeț i.

Consideraț i următorul exemplu pentru a defini un pointer care stochează adresa unui întreg.

[Link] = 10;
[Link]* p = &n;// Variabila p de tip pointer pointează la adresa variabilei n de tip int
teger.

Declaraț i un pointer

Punctatorul în limbajul C poate fi declarat folosind * (simbolul asterisc). De asemenea, este cunoscut sub numele de indirectionare.
pointer folosit pentru a dereferentia un pointer.

[Link]*a;//pointer la int
[Link]*c;//pointer la char

Exemplu de pointer

Un exemplu de utilizare a pointerilor pentru a imprima adresa ș i valoarea este dat mai jos.

După cum poț i vedea în figura de mai sus, variabila pointer stochează adresa variabilei număr, adică fff4.
Valoarea variabilei număr este 50. Dar adresa variabilei pointer p este aaa3.

Cu ajutorul * (operatorul de indirectionare), putem imprima valoarea variabilei pointer p.

Să vedem exemplul de pointer, aș a cum a fost explicat pentru figura de mai sus.

#include<stdio.h>
intmain(){
50
int*p;
p=&number;//stochează adresa variabilei number
printf("Adresa variabilei p este %x \n",p);// p conț ine adresa numărului, de aceea printi
ng p oferă adresa numărului.
printf("Valoarea variabilei p este %d \n",*p);// După cum ș tim, * este folosit pentru a dereferenț ia un pointer
prin urmare, dacă imprimăm *p, vom obț ine valoarea stocată la adresa conț inută de p.
return0;
}

Ieşire

Adresa variabilei de tip număr este fff4


Adresa variabilei p este fff4
Valoarea variabilei p este 50

Punctator la masiv

[Link][10];
[Link]*p[10]=&arr;// Variabila p de tip pointer indică adresa unui array de întregi arr.

Punctator către o funcț ie

[Link] (int);
[Link](*p)(int) = &display;// Pointerul p indică adresa unei func ț ii

Punctator către structură

[Link] {
2. inti
3. floatf;
4. }ref;
[Link] *p = &ref;

Avantajul pointer-ului

1) Pointerul reduce codul ș i îmbunătăț eș te performanț a, fiind folosit pentru a recupera ș iruri, arbori, etc.
ș i folosit cu tablouri, structuri ș i funcț ii.

2) Putem returna valori multiple dintr-o funcț ie folosind pointerul.

Te face capabil să accesezi orice locaț ie de memorie din memoria computerului.


Utilizarea pointerului

Există multe aplicaț ii ale pointeurilor în limbajul C.

1) Alocarea dinamică a memoriei

În limbajul C, putem aloca dinamic memorie folosind funcț iile malloc() ș i calloc() unde
se foloseș te un pointer.

2) Array-uri, Funcț ii ș i Structuri

Punctele în limbajul C sunt utilizate pe scară largă în tablouri, funcț ii ș i structuri. Reduce codul ș i
îmbunătăț eș te performanț a.

Punctator la array
Foloseș te un pointer la un array ș i apoi foloseș te acel pointer pentru a accesa elementele array-ului. De exemplu,

#include<stdio.h>
void main()
{
int a[3] = {1, 2, 3};
int *p = a;
pentru (int i = 0; i < 3; i++)
{
printf("%d", *p);
p++;
}
return 0;
}

Ieşire
123
Sintaxă:

(a+i)//pointer cu un array este la fel ca: a[i]

Array de Punctatoare în C

Când dorim să ne referim la mai multe variabile sau memorii de acelaș i tip de date într-un program C, folosim
o matrice de pointeri.

Să presupunem că un total de cinci angajaț i lucrează la o fabrică de cheesecake. Putem stoca


numele angajaț ilor sub formă de matrice. Împreună cu aceasta, stocăm ș i numele angajaț ilor
lucrând la birou, la bibliotecă ș i la magazinul de pantofi.

Acum, să presupunem că, odată ce citim toate numele angajaț ilor la întâmplare, vrem să sortăm toate.
numele angajaț ilor care lucrează în fabrica de cheesecake. Sortarea tuturor numelui angajaț ilor necesită
citirea, schimbarea ș i copierea unei cantităț i mari de date. Dar, deoarece am stocat toate numele angajaț ilor în
grupuri/array-uri, putem să ne referim direct la array-ul numelui angajaț ilor care lucrează la cheesecake
fabrica.

Aplicarea tablourilor de pointeri

Să presupunem că dorim să construim un sistem închis, iar acest sistem foloseș te un alt tip de
termometru pentru măsurarea temperaturii. Acum, în acest caz, putem folosi un tablou pentru a păstra
adresa de memorie pentru fiecare senzor. Astfel, manipularea stării senzorului devine foarte uș oară.

Exemplu

Termometrul va reț ine adresa primului senzor.

Termostatul va păstra adresa celui de-al doilea senzor ș i aș a mai departe.

Acum, deoarece este un tablou, poate interacț iona direct cu termopointul indexat în tablou. Astfel, ne
voi obț ine statutul primului senzor cu thermo[0], al doilea folosind thermo[1], ș i aș a mai departe.

Declaraț ia unui tablou de pointeri în C

O matrice de pointeri poate fi declarată exact aș a cum declarăm matricele de char, float, int etc. Sintaxa
pentru declararea unui tablou de indicatoare ar fi:

tip_date *numele_array [dimensiune_array];

Acum, să ne uităm la un exemplu pentru acelaș i lucru,

int *ary[55]

Aceasta este un array cu un total de 55 de pointeri. În cuvinte simple, acest array este capabil să deț ină
abordează un total de 55 de variabile întregi. Gândeș te-te la asta - ary[0] va ț ine adresa unui
variabila întreagă, atunci ary[1] va deț ine adresa celeilalte variabile întregi ș i aș a mai departe.

Punctatoare ca argument de funcț ie în C


Pointerul ca parametru de funcț ie este folosit pentru a păstra adresele argumentelor transmise în timpul apelului funcț iei.
Acesta este cunoscut ș i sub numele de apel prin referinț ă. Când o funcț ie este apelată prin referinț ă, orice modificare făcută la
variabila de referinț ă va afecta variabila originală.

Exemplu: Schimbarea a două numere folosind pointeri

#include <stdio.h>
void swap(int *a, int *b);
int principala()
{
int m = 10, n = 20;
printf("m = %d\n", m);
printf("n = %d\n\n", n);
swap(&m, &n); //trecerea adresei lui m ș i n la funcț ia swap
printf("După schimbare: ");
printf("m = %d\n", m);
printf("n = %d", n);
return 0;
}
/*
punctatoarele 'a' ș i 'b' deț in ș i
indică adresa lui 'm' ș i 'n'
*/
void schimba(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}

m = 10
n = 20
După schimbare:
m = 20
10
Funcț ii care returnează variabile de tip Pointer

O funcț ie poate returna, de asemenea, un pointer către funcț ia apelantă. În acest caz, trebuie să fii atent, deoarece
variabilele locale ale funcț iei nu trăiesc în afara funcț iei. Ele au domeniu doar în interiorul funcț iei.
Aș adar, dacă returnezi un pointer conectat la o variabilă locală, acel pointer va indica spre nimic
când se termină funcț ia.
Gestionarea fiș ierelor

Ce este gestionarea fiș ierelor în C?


Gestionarea fiș ierelor se referă la metoda de stocare a datelor în programul C sub formă de ieș ire sau intrare care ar putea avea
a fost generat în timpul executării unui program C într-un fiș ier de date, adică un fiș ier binar sau un fiș ier text pentru analize viitoare ș i
referinț ă în acel program.

Ce este un fiș ier în C?


Un fiș ier se referă la o sursă în care un program stochează informaț iile/datele sub formă de biț i de secvenț ă pe un disc
(permanent). Conț inutul disponibil pe un fiș ier nu este volatil, ca memoria compilatorului în C. Dar programul poate
efectuaț i diverse operaț ii, cum ar fi crearea, deschiderea, citirea unui fiș ier sau chiar manipularea datelor prezente în interior
fiș ierul. Acest proces este cunoscut sub numele de gestionarea fiș ierelor în C.

De ce avem nevoie de gestionarea fiș ierelor în C?

Există momente când rezultatul generat de un program după compilare ș i rulare nu serveș te nevoilor noastre.
scopul intenț ionat. În astfel de cazuri, s-ar putea să dorim să verificăm ieș irea programului de mai multe ori. Acum, compilând ș i
rularea aceluiaș i program de mai multe ori devine o sarcină plictisitoare pentru orice programator. Exact aici vine fiș ierul
manipularea devine utilă.
Să vedem câteva motive pentru care gestionarea fiș ierelor face programarea mai uș oară pentru toată lumea:

• Reutilizabilitate: Gestionarea fiș ierelor ne permite să păstrăm informaț iile/datele generate după ce rulăm programul.
• Economiseș te timp: Unele programe ar putea necesita o cantitate mare de input din partea utilizatorilor lor. În astfel de cazuri, fiș ierul
gestionarea îț i permite să accesezi uș or o parte a unui cod folosind comenzi individuale.
• Capacitate de stocare lăudabilă: Atunci când stocaț i date în fiș iere, puteț i lăsa în urmă grija de a stoca totul.
informaț iile în masă în orice program.
• Portabilitate: Conț inuturile disponibile într-un fiș ier pot fi transferate în altul fără nicio pierdere de date.
sistemul computerizat. Acest lucru economiseș te mult efort ș i minimizează riscul de codare greș ită.

Tipuri de fiș iere într-un program C


Când ne referim la gestionarea fiș ierelor, ne referim la fiș iere sub formă de fiș iere de date. Acum, aceste fiș iere de date sunt disponibile în 2
forme distincte în limbajul C, ș i anume:

• Fiș iere Text


• Fiș iere binare

Fiș iere Text


Fiș ierele de text sunt cele mai de bază/simpliste tipuri de fiș iere pe care un utilizator le poate crea într-un program C. Creăm fiș ierele de text
folosind un fiș ier cu extensia .txt cu ajutorul unui editor de text simplu. În general, putem folosi notepad-uri pentru crearea fiș ierelor .txt
fiș iere. Aceste fiș iere stochează informaț ii intern în format de caractere ASCII, dar când deschidem aceste fiș iere, conț inutul/textul
se deschide într-o formă uș or de citit.
Fiș ierele text sunt, astfel, foarte uș or de accesat, precum ș i de utilizat. Dar există un dezavantaj major; lipsa securităț ii. Deoarece o
Fiș ierul .txt poate fi accesat cu uș urinț ă, informaț iile nu sunt foarte sigure în el. Adăugat la asta, fiș ierele text consumă o cantitate foarte mare
spaț iu în depozitare.
Pentru a rezolva aceste probleme, avem un tip diferit de fiș ier în programele C, cunoscut sub numele de fiș iere binare.

Fiș iere binare


Fiș ierele binare stochează informaț ii ș i date în format binar de 0-uri ș i 1-uri (sistemul de numeraț ie binară). Astfel, fiș ierele
ocupă un spaț iu comparativ mai mic în stocare. În cuvinte mai simple, fiș ierele binare stochează date ș i informaț ii în acelaș i mod
modul în care un computer păstrează informaț ia în memoria sa. Astfel, aceasta poate fi accesată foarte uș or în comparaț ie cu un fiș ier text.

Fiș ierele binare sunt create cu extensia .bin într-un program ș i depăș esc dezavantajul fiș ierelor text în
un program din moment ce oamenii nu pot să-l citească; numai maș inile pot. Astfel, informaț ia devine mult mai sigură. Astfel,
fiș ierele binare sunt cele mai sigure în ceea ce priveș te stocarea fiș ierelor de date într-un program C.

Operatori/Fonț ii pe care le folosim pentru gestionarea fiș ierelor în C


Putem folosi o varietate de funcț ii pentru a deschide un fiș ier, a-l citi, a scrie mai multe date, a crea un fiș ier nou, a închide sau a ș terge un fiș ier.
fiș ier, căutare pentru un fiș ier, etc. Acestea sunt cunoscute sub numele de operatori de manipulare a fiș ierelor în C.

Iată o listă de funcț ii care vă permit să faceț i acest lucru:

Descrierea funcț iei Funcț ie în utilizare

folosit pentru a deschide un fiș ier existent sau un fiș ier nou fopen()

scrierea datelor într-un fiș ier disponibil fprintf()

citirea datelor disponibile într-un fiș ier fscanf()

scrierea oricărui caracter în fiș ierul programului fputc()

citind caracterul dintr-un fiș ier disponibil fgetc()

folosit pentru a închide fiș ierul programului fclose()

a fost utilizat pentru a seta pointerul fiș ierului la poziț ia fiș ierului dorită fseek()

scrierea unui întreg într-un fiș ier disponibil fputw()

a fost utilizat pentru a citi un întreg din fiș ierul dat fgetw()

folosit pentru a citi poziț ia curentă a unui fiș ier ftell()

setează un pointer de fiș ier destinat la începutul fiș ierului în sine rewind()

Notă: Este important să ș tim că trebuie să declarăm un pointer de tip fiș ier atunci când lucrăm cu diverse fiș iere într-un
program. Acest lucru ajută la stabilirea unei comunicări directe între un program ș i fiș iere.
Iată cum poț i face asta:
FILE *fpointer;
Dintre toate operaț iile/funț iile menț ionate mai sus, să discutăm despre câteva dintre operaț iile de bază pe care le efectuăm în
limba C.

Operaț iuni efectuate în gestionarea fiș ierelor


Procesul de gestionare a fiș ierelor permite unui utilizator să actualizeze, să creeze, să deschidă, să citească, să scrie ș i, în cele din urmă, să ș teargă fiș ierul/conț inutul
în fiș ierul care există pe sistemul local de fiș iere al programului C. Iată operaț iile principale pe care le poț i efectua asupra
un fiș ier într-un program C:

• Deschiderea unui fiș ier care există deja


• Crearea unui fiș ier nou
• Citirea conț inutului/datei din fiș ierul existent
• Scrierea mai multor date în fiș ier
• Ș tergerea datelor din fiș ier sau a fiș ierului în întregime

Deschiderea unui Fiș ier în Program – pentru a crea ș i edita date


Deschidem un fiș ier cu ajutorul funcț iei fopen() care este definită în fiș ierul header - stdio.h.
Iată sintaxa pe care o urmăm atunci când deschidem un fiș ier:

ptr = fopen ("openfile" , "openingmode");


Să aruncăm o privire asupra unui exemplu pentru acelaș i lucru,

fopen ("E:\myprogram\[Link]" , "w");


fopen ("E:\myprogram\[Link]" , "rb");

• Aici, dacă presupunem că fiș ierul – [Link] nu există cu adevărat în locaț ia E:\myprogram.
Aici, am folosit modul „w”. Astfel, prima funcț ie va crea un fiș ier nou cu numele
[Link] ș i apoi deschideț i-l pentru scriere (deoarece am folosit modul "w").
• „w” se referă la modul de scriere. Acesta permite unui programator să suprascrie/editeze ș i să creeze conț inutul într-un
fiș ier de program.
• Acum, haideț i să ne uităm la al doilea fiș ier binar [Link] care este prezent în E:\myprogram
locaț ie. Astfel, a doua funcț ie de aici va deschide fiș ierul (care există deja) pentru citire în modul "rb"
mod binar.
• „rb” se referă la modul de citire. Acesta permite doar citirea unui fiș ier, dar nu ș i suprascrierea lui. Astfel, va permite doar
citeș te acest fiș ier disponibil în program.
Să aruncăm o privire la câteva moduri de deschidere folosite în programele C:

Modurile de deschidere a C în I/O standard al unui program

Mod în Sensul modului Când fiș ierul nu există


Program

r Deschide un fiș ier pentru a citi conț inutul. În cazul în care fiș ierul nu există în
dacă locaț ia este invalidă, atunci fopen() va returna NULL.
rb Deschide un fiș ier pentru a citi conț inutul în binar În cazul în care fiș ierul nu există în
mod. dacă locaț ia nu este găsită, atunci fopen() va returna NULL.

w Deschide un fiș ier pentru a scrie conț inutul. În cazul în care fiș ierul există, conț inutul său este
suprascris.
În cazul în care fiș ierul nu există în
locaț ie, atunci va crea un nou fiș ier.

wb Deschide un fiș ier pentru a scrie conț inutul în format binar În cazul în care fiș ierul există, atunci conț inutul său
mod. va fi suprascris.
În cazul în care fiș ierul nu există în
locaț ie, atunci va crea un fiș ier nou.

a Deschide un fiș ier pentru a adăuga conț inut. În cazul în care fiș ierul nu există în
locaț ie, atunci va crea un nou fiș ier.
Asta înseamnă că datele programului sunt adăugate la
sfârș itul fiș ierului într-un program.

ab Deschide un fiș ier pentru a adăuga conț inut în binar În cazul în care fiș ierul nu există în
mod. locaț ie, atunci va crea un nou fiș ier.
Asta înseamnă că datele programului sunt adăugate la
sfârș itul fiș ierului într-un program în mod binar.

r+ Deschide un fiș ier pentru a scrie ș i a citi În cazul în care fiș ierul nu există în
conț inut. dacă locaț ia este invalidă, atunci fopen() va returna NULL.

rb+ Deschide un fiș ier atât pentru scriere, cât ș i pentru citire În cazul în care fiș ierul nu există în
conț inut în mod binar. locaț ia, atunci fopen() va returna NULL.

w+ Deschide un fiș ier atât pentru scriere, cât ș i pentru citire. În cazul în care fiș ierul există, conț inutul său este
suprascrise.
În caz că fiș ierul nu există în
locaț ia, atunci va crea un fiș ier nou.

wb+ Deschide un fiș ier atât pentru scriere, cât ș i pentru citire În cazul în care fiș ierul există, conț inutul său este
conț inut în modul binar. suprascris.
În cazul în care fiș ierul nu există în
locaț ie, atunci va crea un fiș ier nou.

a+ Deschide un fiș ier atât pentru adăugare, cât ș i pentru citire În cazul în care fiș ierul nu există în
conț inut. locaț ie, atunci va crea un fiș ier nou.

ab+ Deschide un fiș ier atât pentru adăugare cât ș i pentru citire În cazul în care fiș ierul nu există în
conț inut în modul binar. locaț ie, atunci va crea un fiș ier nou.

Cum închidem un fiș ier?


Odată ce scriem/citim un fiș ier într-un program, trebuie să-l închidem (pentru fiș iere binare ș i text). Pentru a închide un fiș ier, utilizăm
funcț ia fclose() într-un program.
Iată cum ar arăta programul:
fclose(fptr);
În acest caz, fptr se referă la pointerul de fiș ier care este asociat cu acel fiș ier care trebuie închis într-un program.

Cum citim ș i scriem datele în fiș ierul text?


Folosim fscanf() ș i fprintf() pentru a scrie ș i citi datele din fiș ierul text. Acestea sunt practic versiunile de fiș ier ale
scanf() ș i printf(). Dar există o diferenț ă majoră, adică, atât fscanf() cât ș i fprintf() aș teaptă un pointer care să pointeze
în direcț ia structurii FILE din program.
Scrierea datelor în fiș ierul text într-un program
#include <stdio.h>
#include <stdlib.h>
int main()
{
int val;
FILE *fptr;
// dacă foloseș ti Linux sau MacOS, atunci trebuie să foloseș ti locaț ii corespunzătoare

fptr = fopen ("C:\[Link]","w");


dacă(fptr == NULL)
{
printf("Tip de fiș ier invalid!");

ieș ire(1);
}
printf("Vă rugăm să introduceț i valoarea: ");

scanf("%d",&val);
fprintf(fptr, "%d", val);
închide(fptr);
return 0;
}
Programul menț ionat aici ar lua numărul dat ș i l-ar stoca în fiș ierul [Link].
Odată ce compilăm acest program ș i îl rulăm pe sistem, vom putea asista la un fiș ier text [Link]
creat pe unitatea C a calculatorului nostru! De asemenea, când deschidem acest fiș ier, atunci vom putea vedea ce număr întreg avem
introduse ca input în timpul codării.

Citirea informaț iilor din fiș ierul text într-un program


#include <stdio.h>
#include <stdlib.h>
int main()
{
int val;
FILE *fptr;
// Programul se va încheia în cazul în care pointerul de fiș ier fptr returnează NULL.

dacă ((fptr = fopen("C:\[Link]","r")) == NULL) {


printf("Eroare vizibilă detectată. Nu se poate deschide fiș ierul!");

iesire(1);
}
fscanf(fptr,"%d", &val);
printf("Valoarea integerului n este=%d", val);
fclose(fptr);
return 0;
}
Programul dat aici va citi numărul întreg pe care l-am introdus în fiș ierul [Link] ș i apoi va imprima
integer ca ieș ire pe ecranul computerului.
În cazul în care ai reuș it să creezi fiș ierul cu ajutorul Exemplului 1, atunci rularea programului în
Exemplul 2 va genera întregul pe care l-aț i introdus.
De asemenea, poț i folosi alte funcț ii precum fputc(), fgetchar() etc., într-un mod similar în program.

Întrebări
Ce este manipularea fiș ierelor în C?
Manipularea fiș ierelor se referă la metoda de stocare a datelor în programul C sub formă de ieș ire sau intrare care ar putea avea
a fost generat în timpul rulării unui program C într-un fiș ier de date, adică, un fiș ier binar sau un fiș ier text pentru analiza viitoare ș i
referinț ă în acel program.

Pentru ce este gestionarea fiș ierelor?

Există momente când ieș irea generată de un program după compilare ș i rulare nu ne serveș te.
scopul intenț ionat. În astfel de cazuri, s-ar putea să dorim să verificăm ieș irea programului de mai multe ori. Acum, compilarea ș i
rularea aceluiaș i program de mai multe ori devine o sarcină plictisitoare pentru orice programator. Aici intervine exact fiș ierul
gestionarea devine utilă.

Ce sunt operaț iunile de manipulare a fiș ierelor?


Putem folosi o varietate de funcț ii pentru a deschide un fiș ier, a-l citi, a scrie mai multe date, a crea un fiș ier nou, a închide sau a ș terge un fiș ier.
fiș ier, caută un fiș ier etc. Acestea sunt cunoscute sub numele de operatori de manipulare a fiș ierelor în C.

Care este diferenț a dintre fiș ierele text ș i cele binare?


Creăm fiș iere text folosind o extensie .txt cu ajutorul unui editor de text simplu. Fiș ierele binare stochează informaț ii ș i
datele în format binar de 0 ș i 1 (sistemul de numeraț ie binar). Fiș ierele binare sunt create cu extensia
.bin într-un program ș i depăș eș te dezavantajul fiș ierelor text într-un program.

S-ar putea să vă placă și