/*------------------------------------------------*/ /* */ /* afiseaza lungimea lg_max a celei mai lungi */ /* linii a fisierului */ /* */ /*------------------------------------------------*/ #include <stdio.h> void main(void) { FILE *f; char c; int lg_max, lg_curenta; lg_max=lg_curenta=0; if (!(f=fopen("TEST", "r"))) { puts("Fisierul TEST nu poate fi deschis"); return; } while ((c=getc(f))!=EOF) if (c=='\n') { if (lg_max<lg_curenta) lg_max = lg_curenta; lg_curenta = 0; } else lg_curenta++; fclose(f); printf ("\nLinia cea mai lunga are lungimea %d", lg_max); }
/*---------------------------------------*/ /* */ /* copiaza continutul unui fisier binar */ /* in alt fisier binar */ /* */ /----------------------------------------*/ #include <stdio.h> void main(void) { FILE *fs, *fd; char c; if ((fs=fopen("sursa", "rb"))==NULL) { fprintf(stderr, "Fisierul sursa nu poate fi deschis\n"); return; } if ((fd=fopen("dest", "wb"))==NULL) { fprintf(stderr, "Fisierul dest nu poate fi deschis\n"); return; } c=getc(fs); while (!feof(fs)) { putc(c, fd); c=getc(fs); } fclose(fs); fclose(fd); }
/*----------------------------------------------*/ /* */ /* evidenta unei grupe de studenti */ /* */ /*----------------------------------------------*/ #include <stdio.h> #include <conio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> #define LNUME 20 /* lungimea maxima a numelor */ typedef struct { char nume[LNUME]; int varsta; float medie; } student; char fisier[13]; /* numele fisierului */ /*---------------------------------------------------*/ /* */ /* adauga datele unui nou student in fisier */ /* */ /----------------------------------------------------*/ void AdaugStudent(void) { FILE *f; student s; if (!(f=fopen(fisier, "at"))) { puts("\nFisierul nu poate fi deschis."); return; } printf("\nNumele, varsta, media: "); scanf("%s %d %f", s.nume, &s.varsta, &s.medie); fflush(stdin); /* se goleste buffer-ul tastaturii */ fprintf(f, "%20s %2d %6.2f\n", s.nume, s.varsta, s.medie); fclose(f); } /*-------------------------------------------*/ /* */ /* afiseaza datele tuturor studentilor */ /* */ /*--------------------------------------------*/ void ListezStudenti(void) { FILE *f; student s; if (!(f=fopen(fisier, "rt"))) { puts("\nFisierul nu poate fi deschis."); return; } while(fscanf(f,"%s %d %f",s.nume,&s.varsta,&s.medie)!=EOF) printf("\n%-20s %-2d %-6.2f\n",s.nume,s.varsta,s.medie); fclose(f); } /*-----------------------------------------------*/ /* */ /* modifica datele studentului */ /* al carui nume se citeste in variabila n */ /* */ /*-----------------------------------------------*/ void ModificStudent(void) { int gasit=0; FILE *f; student s; char n[LNUME]; /* numele studentului ale */ /* carui date se vor modifica */ if (!(f=fopen(fisier, "r+t"))) { puts("Fisierul nu poate fi deschis."); return; } printf("\nNume student: "); fgets(n, LNUME, stdin); while(fscanf(f,"%s %d %f",s.nume,&s.varsta,&s.medie)!=EOF) if (!strcmp(n,s.nume)) { /* studentul a fost gasit, se afiseaza datele sale */ printf("%-20s %-2d %-6.2f\n",s.nume,s.varsta,s.medie); gasit=1; break; } if (!gasit) printf("\nStudentul %s nu exista in fisier.", n); else { printf("\nNumele, varsta, media: "); scanf("%s %d %f", s.nume, &s.varsta, &s.medie); fflush(stdin); /* pozitionare la inceputul inregistrarii */ fseek(f, -30, SEEK_CUR); fprintf(f,"%20s %2d %6.2f\n", s.nume, s.varsta, s.medie); } fclose(f); } /*----------------------------------*/ /* */ /* afiseaza meniul programului */ /* */ /*----------------------------------*/ void AfisezMeniu(void) { puts("\na, A ---- adaugare student"); puts("m, M ---- modificare date student"); puts("l, L ---- listare studenti"); puts("x, X ---- parasire program"); } void main(void) { char opt; puts("Nume fisier: "); fgets(fisier, 13, stdin); while (1) { AfisezMeniu(); opt=tolower(getche()); switch(opt) { case 'a': AdaugStudent(); break; case 'm': ModificStudent(); break; case 'l': ListezStudenti(); break; case 'x': exit(0); default: puts("Comanda eronata\n"); } } }Se observa ca cele trei operatii principale efectuate asupra fisierului: adaugare, listare si modificare sunt implementate în trei functii distincte.
Functia adauga înscrie în fisier datele unui student sub forma unei înregistrari de 30 de octeti (20 pentru nume, 1 spatiu, 2 pentru vârsta, 1 spatiu, 6 pentru medie). Acest lucru este folosit în functia modifica când se repozitioneaza indicatorul de pozitie în fisier la începutul înregistrarii care urmeaza a fi modificata.