DRC 0 Denunciar post Postado Maio 22, 2006 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
ricci ottadnot 4 Denunciar post Postado Maio 23, 2006 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