Inca cateva chestii: Am uitat, fputc iti scrie doar un caracter. fputs iti scrie un string. Lucrul cu structurile este usor. Poti sa te gandesti la o structura ca si la o clasa de lucruri. Si pe care o definesti ca pe o variabila. Daca luam exemplul tau cu produsul, ai avea un concept produs catre trebuie descris. Pentru a face aste te gandesti la ce proprietati are un produs si ajungi la concluzia ca are un cod de produs, un nume si o unitate de masura(litri, kg etc). In C nu ai tipuri de variabile pentru tot ce exista pe aceasta lume, din cauza asta trebuie sa iti definesti tu tipul. Deci ai o structura care iti defineste produsul. Daca ne gandim la cele 3 proprietati identificate pe rand avem asa: codul de produs este un numar, deci o sa ai un int. Dupa asta te gandesti ca acel cod poate sa fie foarte mare asa ca poti sa faci acest atribut long. numele produsului este un text, deci ai facut un array de 100 caractere care formeaza numele prodului unitatea de masura poate sa fie orice de la kg, litru, metrii etc asa ca pentru simplitate si pentru a nu defini fiecare tip, poti sa faci si acest atribut ca si string. Deci ti-ai definit o variabila de tip produs cu caracteristicle descoperite mai sus struct produse{ long cod; char nume[100]; char unitate[20]; }; Dupa asta ai zis ca vrei sa folosesti ace structura ca pe orice alta variabila(primitiva). Cum este int, char etc... typedef struct produse PRODUS; Dupa asta ai initializat variabila: PRODUS p; Pentru ca multe functii iti cer un pointer la tipul de date, ai creat un pointer catre variabila PRODUS si ai zis ca sa pointeze catre adresa lui PRODUS p astfel ca accesezi variabila p prin intermediul pointerului care reprezinta adresa la care se gaseste p in memorie. PRODUS *pp = &p // pointer la tipul PRODUS este egal cu adresa variabilei p; Dupa asta ai accesat campurile structurii, asta o faci ca si lucrul cu orice alta variabila: Exemplu: pp->cod = 542; este acelasi lucru ca si cum ai asigna o valoare unui long. long cod = 542 La fel si cu celelalte variabile de tip char. Atentie! Daca ai un pointer cum este pp trebuie sa accesezi campurile structurii PRODUS prin -> Adica: pp->nume Daca nu ai pointer la structura si vrei sa o folosesti in mod normal, trebuie sa accesezi campurile cu . Adica: p.nume Intotdeauna folosesti -> pentru pointeri si . pentru variabile care nu sunt pointeri. De ce sunt utile structurile? Structurile sunt utile pentru ca daca ai de exemplu o functie care ia ca si argumente un Angajat si sa zicem un departament pe care este angajat, este mult mai simplu de folosit decat in cazul in care ar trebui sa pui variabila pentru fiecare atribut ale acestor doua concepte. Exemplu: struct Angajat { long cod; char[100] nume; char[100] adresa; float salar; }; struct Departament { long cod; char[100] nume; char[100] sef; char[100] locatie; }; //ai functia: void arataDetaliiAngajat(Angajat a, Departament d); Sau daca nu ai folosi structuri si ai vrea sa faci aceasi functie, ar arata ceva de genul: void arataDetaliiAngajat(long cod_angajat, char *nume_angajat, char *adresa_angajat, float salar_angajat, long cod_departament, char *nume_departament, char *sef_departament, char *locatie_departament) Care dintre cele doua exemple de functii ti se pare mai usor de folosit? Ce s-ar intampla daca Angajat si Departament ar avea si alte atribute mai complexe? Cum ar arata atunci functia daca nu ai folosi structuri ci doar variabile primitive cum sunt int, long, char etc... ? Daca nu ai inteles si mai ai intrebari posteaza si incercam sa te ajutam. Bafta!