Exemplos de Tipos Estruturados com Arquivos

Exemplo de armazenamento e recuperação de estruturas de arquivos na linguagem c

#include <stdio.h>
#include <stdlib.h>
 
typedef struct aluno{
        char nome[30];
        int matricula;
        int periodo;
}aluno;
 
typedef struct turma{
        int tamanho;
        aluno alunos[30];
}turma;
 
void cadastrar_aluno(aluno a,turma *t);
 
void imprimir_aluno(aluno a);
 
void imprimir_turma(turma t);
 
int tam = 0;
 
FILE * arquivo;
 
int main(){
    turma turma1;//alunos da turma 1
    turma1.tamanho = 0;
 
    //abri arquivo para leitura
    int tamArq;
    printf("Abrindo arquivo para leitura...\n");
    arquivo = fopen("agenda.txt","r");  
 
    //coloca o cursor de leitura no final do arquivo 
    fseek (arquivo , 0 , SEEK_END);
    //descobre onde ele esta(em bytes),ou seja, o tamanho do arquivo
    tamArq = ftell (arquivo);
    printf("TamArq:%d\n",tamArq);
    fseek(arquivo, 0, SEEK_SET);
    //le do arquivo e coloca tudo na turma1. Imprime tambem o numero de bytes lidos
    printf("bytes lidos:%d\n",fread(&turma1,1,tamArq,arquivo)); 
    fclose(arquivo);
    //cadastra um aluno
    aluno a = {"Rhaul", 423423414, 5};
    cadastrar_aluno (a, &turma1);
    //imprime a turma
    imprimir_turma (turma1);
 
    //abre o arquivo para escrita(apagando a versao anterior)
    arquivo = fopen("agenda.txt","w");
    //grava novamente a turma inteira no arquivo
    fwrite(&turma1,sizeof(turma),1,arquivo);
    //fecha o arquivo
    fclose(arquivo);
    system("PAUSE");
    return 0;
}
 
void imprimir_turma(turma t){
     int i;
     for (i = 0 ; i < t.tamanho ; i++){
         printf("aluno %d:\n", i);
         imprimir_aluno(t.alunos[i]);
     }
}
 
void imprimir_aluno(aluno a){
     printf("%s\n", a.nome);
     printf("%d\n", a.matricula);
     printf("%d\n", a.periodo);     
}
 
void cadastrar_aluno(aluno a, turma *t){
     t->alunos[t->tamanho] = a;
     t->tamanho++;
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.