• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

arjc

ler de um ficheiro para uma estrutura...

2 mensagens neste tópico

Olá! Estou com algumas dúvidas num programa q tenho vindo a desenvolver para uma das cadeiras do meu curso...

Se tiver uma estrutura do género:

typedef struct _aluno{
int numero;
char nome[50];
}Aluno[100];

e um ficheiro q contenha a seguinte informação:

23345

Maria

10978

João

como posso enviar a informação do ficheiro para a estrutura?

eis a minha tentativa:  :)

void LerFicheiro(Aluno *aluno)
{
FILE *f;
        int i;
int numero;
char nome[50];

if( (f = fopen("aluno.txt", "r")) == NULL )
	printf("Nao foi possivel abrir ficheiro para leitura\n");
for(i=0; i< 100; i=i+2){
	fgets(numero, f);
	aluno[ i ]->numero = numero;
	fgets (nome,50, f);
	strcpy(aluno[ i ]->nome, nome);

}
fclose(f);	
}

...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aqui muitas coisas que não estão bem...

Em primeiro lugar, porquê é que no ciclo andas de 2 em 2 (i=i+2)?

Acho que não faz sentido.

Depois, se o número do aluno é inteiro, porquê é que o lês como sendo uma string (fgets(numero, f); aluno[ i ]->numero = numero;)?

Também não faz sentido!

E ainda, porquê é que usas a "seta" (->) para aceder aos elementos da estrutura? Também não faz sentido!

O typedef... também não gosto!

Então, eu faria uma coisa assim:

struct _aluno{
   int numero;
   char nome[50];
}Aluno[100];


void LerFicheiro(struct _aluno *aluno)
{
   FILE *f;
   int i;

   if( (f = fopen("aluno.txt", "r")) == NULL )
      printf("Nao foi possivel abrir ficheiro para leitura\n");
   else
   {
      for(i=0; i<100; i++){
         fscanf(f, "%d ", &(aluno[i].numero));
         fgets (aluno[i].nome, 50, f);
      }
      fclose(f);
   }
}

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora