Structuri in C++ (Partea a II-a)

5 februarie

In tutorialul precedent v-am explicat cum se declara structurile si operatiile de baza. In acest tutorial veti afla cum sa introduceti structurile intr-un fisier binar. Cu aceasta ocazie veti invata si cum sa lucrati cu fisiere binare.

#include <stdio.h>
#include <conio.h>
// Declaram structura ELEV
typedef struct
{
char nume[50];
char prenume[50];
int medie;
}ELEV;
void main()
{
// Declararea variabilelor
ELEV element;
FILE *f;
int i, n;
// Pregatirea fisierului binar pentru scriere
if((f=fopen("struct_elev.mzk","wb")) == NULL)
{
printf("Fisierul nu poate fi deschis");
exit(1);
}
// Citirea datelor de la tastatura
printf("Intruduceti numarul de structuri ce vor fi introduse: ");
scanf("%d", &n);
for (i=0; i<n; i++)
{
printf("Introduceti numele elevului: ");
scanf("%s", element.nume);
printf("Introduceti prenumele elevului: ");
scanf("%s", element.prenume);
printf("Introduceti media acestuia: ");
scanf("%d", &element.medie);
// Introducerea structurilor in fisierul binar
fwrite(&element, sizeof(element), 1, f);
}
fclose(f);
// Pregatirea fisierului binar pentru citire
f = fopen("struct_elev.mzk", "rb");
// Aflarea numarului de structuri din fisier
fseek(f, 0L, 2);
n = ftell(f)/sizeof(element);
fseek(f, 0L, 0);
// Citirea structurilor din fisier si afisarea lor
for (i=0; i<n; i++)
{
fread(&element, sizeof(element), 1, f);
printf("%s %s, %d.n", element.nume, element.prenume, element.medie);
}
fclose(f);
getch();
}


Pentru a lucra cu fisiere intr-un program, mai intai trebuie sa declaram o variabile de tip FILE.

FILE *f;

In continuare, am pregatit fisierul binar pentru scriere. Remarcati secventa de cod:

f = fopen("struct_elev.mzk", "wb");

La sfarsitul instructiunii am scris wb. Asta inseamna ca fisierul struct_elev.mzk se deschide pentru scriere. Daca fisierul nu exista, atunci mai intai va fi creeat. Daca fisierul exista, el se va deschide, continutul acestuia va fi sters si numai dupa acest pas programul va continua.

if((f=fopen("struct_elev.mzk","wb")) == NULL)
{
printf("fisierul nu poate fi deschis");
exit(1);
}

Acest if permite continuarea programului doar daca fisierul struct_elev.mzk poate fi deschis.

Structurile vor fi citite ca de obicei. Fiecare structura va fi introdusa in fisier prin instructiunea:

fwrite(&element, sizeof(element), 1, f);

&element inseamna ca dorim sa scriem in fisier structura element. Prin sizeof(element) mentionam cat de mare este structura, pentru ca programul sa stie cata memorie trebuie sa aloce. 1 inseamna ca tirmitem doar 1 structura iar f inseamna ca scriem structura in fisierul f.
Dupa ce ne terminam treaba cu un fisier, acesta trebuie inchis. Inchiderea unui fisier se face prin:

fclose(f);

In partea a doua a programului, deschidem acelasi fisier dar de data aceasta pentru citire.

f = fopen("struct_elev.mzk", "rb");

Scriem rb pentru ca programul sa inteleaga ca fisierul este deschis doar pentru citire. Retineti ca in acest caz fisierul trebuie sa existe.
In cazul in care nu stim cate structuri sunt in fisier, trebuie sa le aflam. Noi stim ca sunt n structuri, dar va voi arata cum sa aflati daca nu ati sti:

fseek(f, 0L, 2);
n = ftell(f)/sizeof(element);
fseek(f, 0L, 0);

fseek(f, 0L, 2) pozitioneaza cursorul la sfarsitul fisierului. n = ftell(f)/sizeof(element) afla practic numarul de structuri. fseek(f, 0L, 0) pozitioneaza cursorul la inceputul fisierului.
Am ajuns in sfarsit la finalul acestui program. Tot ce avem de facut este sa citim structura cu structura si sa o afisam pe ecran. Facem acest lucru printr-un for:

 for (i=0; i<n; i++)
{
fread(&element, sizeof(element), 1, f);
printf("%s %s, %d.n", element.nume, element.prenume, element.medie);
}

Observati instructiunea fread(&element, sizeof(element), 1, f). Prin &element mentionam ca datele citite vor fi atribuite structurii element. sizeof(element) informeaza programul ce marime are pachetul citit, 1 transmite cate structuri vor fi citite iar f de unde citim.



Ti-a placut articolul Structuri in C++ (Partea a II-a)?

Ai nevoie de rezolvarea unei probleme la informatica?

Iti recomandam si urmatoarele articole:

1 comentariu pentru Structuri in C++ (Partea a II-a)

Discuta articolul Structuri in C++ (Partea a II-a)



Contul tau

Categorii

Mozku Network

Ne gasesti si pe Facebook

Articole noi

Fisiere populare

  • Proiect Atestat Informatica Visual FoxPro (439)
  • Twitter Patterns (202)
  • Flash Newsletter (126)
  • hitTest Flash (99)
  • Baza de date auto revizuita (98)

Marcaje articole