Ler Ficheiros em C

Tiagans

Power Member
Boas malta,

Estou a fazer um programa em que preciso de gravar e ler de ficheiros Binários com Listas Genéricas, para que 2 execuções diferentes do programa não implique perca de dados.

O programa é para um consultório médico, que tem que gravar Especialidades, Médicos, Utentes e Consultas.

A função para gravar em ficheiros é:

void escreve(FILE *fp, PNO cabeca, int tamanho) {

PNO ptr;
int n = conta(cabeca);
fwrite(&n, sizeof(int), 1, fp);
for (ptr = cabeca; ptr; ptr = ptr-> proximo) {
fwrite(ptr->dados, tamanho, 1, fp);
}

}

A função que lê ficheiros é:

void lerficheiro(FILE *fp, PNO cabeca, int tamanho) {

PNO ptr;
int n;
fread(&n, sizeof(int), 1, fp);
for (ptr = cabeca; ptr; ptr = ptr -> proximo) {
fread(ptr->dados, tamanho, 1, fp);
}
}

Só que quando faço imprimir, após gravar em ficheiros e abrir de novo o programa, o programa não imprime.

Alguém me pode ajudar?

Obrigado
 
Aqui tens um exemplo para listar o conteúdo de um ficheiro.

struct alu {
int nr;
char nomes[40];
int notas[6];
float media;
};

void ListarFich (void){
struct alu aluno;
FILE *fp;
int k=0,n;
fp=fopen("localização do meu ficheiro","r");
if (fp==(FILE *) NULL)
printf("Erro a abrir o ficheiro");
else {
//podes imprimir aqui alguma coisa
do {
n=fread((char *)&aluno, sizeof(struct alu), 1, fp);
printf("%d - %s", aluno.nr,aluno.nome);
} while (n==1);
fclose(fp);
}
}
 
Aqui tens um exemplo para listar o conteúdo de um ficheiro.

struct alu {
int nr;
char nomes[40];
int notas[6];
float media;
};

void ListarFich (void){
struct alu aluno;
FILE *fp;
int k=0,n;
fp=fopen("localização do meu ficheiro","r");
if (fp==(FILE *) NULL)
printf("Erro a abrir o ficheiro");
else {
//podes imprimir aqui alguma coisa
do {
n=fread((char *)&aluno, sizeof(struct alu), 1, fp);
printf("%d - %s", aluno.nr,aluno.nome);
} while (n==1);
fclose(fp);
}
}

Boas,

Eu percebi o que disseste. Apesar de não perceber porque utilizas ali o k, mas não tem grande influencia.

Agora o que eu queria era quando sair do programa, carregar na opção correspondente a ler de ficheiros e quando imprimisse a lista de utentes, por exemplo, estivessem la todos os utentes que estavam no ficheiro. Entendes? Como se fosse um save de um jogo, que fazes load.

Como disseste, ele vai ler e imprimir logo.

Mas obrigado.
 
Então para isso usas um método que quando carregares na certa opção que referes ele vai ler o conteúdo do ficheiro e imprime essa informação no ecrã.
 
Back
Topo