Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DRC

Alocação Dinâmica?

Recommended Posts

Boas ppl!

Estou a fazer um programa que guarda os dados dos alunos em ficheiro, os dados são carregados para um array de estruturas ao iniciar o programa, mas o problema está na impossibilidade de saber quantos alunos estão no ficheiro para definir o tamanho do array.

Já tentei assim:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <windows.h>//para o uso de system("cls")

#include <conio.h> //para o uso do getch()

#define TAM 50

 

// ...::: Criação de um novo tipo de dados :::...

typedef struct{

char nome[TAM];

int num;

}tdados;

/*<------------------------------------------------------------>*/

 

// ...::: Declaração de variáveis/ficheiro globais :::...

FILE *fp;

int max=0;

tdados *alunos;

/*<------------------------------------------------------------>*/

 

// ...::: abertura do ficheiro para leitura e escrita :::...

int abir(){

int i=0,j=0;

char ch,num2[TAM];

if(NULL!=(fp=fopen("dados.txt","r"))){

while((num2[j]=fgetc(fp))!=EOF){

do{

j++;

}while((num2[j]=fgetc(fp))!='\n');

alunos.num=atoi(num2);

j=0;

while((ch=fgetc(fp))!='\n'){

alunos.nome[j]=ch;

j++;

}

j=0;

i++;

if(alunos=realloc(alunos,1+i)==NULL){

printf("Erro de alocação dinamica");

exit(3);

}

}

}

if(NULL==(fp=fopen("dados.txt","w"))){

printf("Erro\n");

exit(2);

}

max=i; //guarda o numero de registos e a proxima posição livre

fcloseall();

if(NULL==(fp=fopen("dados.txt","w")))return(1);

return(0);

}

/*<------------------------------------------------------------>*/

 

//...::: Armazenamento dos dados no ficheiro e fecho do próprio :::...

void sair(){

int i,j=0;

for(i=0;i<max;i++){

fprintf(fp,"%d",alunos.num);

fprintf(fp,"%c",'\n');

j=0;

do{

fprintf(fp,"%c",alunos.nome[j]);

j++;

}while(alunos.nome[j]!='\0');

fprintf(fp,"%c",'\n');

}

flushall();

fcloseall();

free(alunos);

}

só esta o numero e nome dos alunos no array para não saturar o post de código.

ñ faço a mínima do que esta mal!!!

 

Desculpem qualquer coisa!

Inté,fiquem bem. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

naum estou lembrado de alguma função q retorne o numero de registros no arquivo..

mas você pode fazer d um jeito mais complicado:

 

aponte para o inicio do arquivo com a função rewind(fp)..

faça um laço para contar os registros..

rewind(fp);count = 0;while(!feof(fp))   count++;
no final, count estara guardada a qtde de registros no arquivo..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.