Ir para o conteúdo
Marco Verdial

fgets para estrutura (dados no ficheiro)

Mensagens Recomendadas

Marco Verdial    0
Marco Verdial

Boa tarde a todos, estou aqui com uma dúvida e se alguém me pudesse ajudar agradecia :)

No meu problema eu tenho um ficheiro (simples) em que tenho lá algo como:

7987

Luís Miguel

9879

João Freitas

Numa linha tenho o nr do aluno, seguidamente tenho o nr do aluno. (são só umas 10 linhas)

Eu estou a tentar preencher um vetor de structs com esses dados (para cada aluno). Eu crio o apontador *aluno que é do tipo alunos (a tal estrutura). Este código é em linux que está a ser trabalhado então dai os argv e argc. Basicamente temos de executar o programa na consola e dar logo os "dados". Por exemplo: ./turma 13 alunos.txt

o 13 é o nr de linhas que eu vou ler do ficheiro e o alunos.txt é o ficheiro onde estão os dados. A minha dúvida é no fgest. Eu inicialmente tinha usado fscanf só que estava-me a dar problemas porque estava a ignorar o espaço entre o nome. Por exemplo, em vez de ficar guardado o nome Luís Miguel ficava só Luís...

O código como está não funciona bem, alguém me pode ajudar pf? Peço desculpa se não expliquei bem, mas qualquer questão digam ai que eu tento explicar :)

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "funcoes.h"

int main (int argc, char *argv[])
{
	FILE *fp;
	int i,size;
	alunos *aluno; //  (anteriormente) Vetor criado conforme o tamanho que o utilizador quer
	
	size=atoi(argv[1]);
	aluno=(alunos*)calloc(size, sizeof(alunos));
	
	fp=fopen(argv[2],"r");

	for (i=0;i<size;i++)
	{
		fscanf(fp,"%d", &(aluno[i].numero));
		fgets(aluno[i].nome,sizeof aluno[i].nome,fp);
	}
	
	imprimir(aluno,size); // dar print do vetor
	
	fclose(fp); // fechar o ficheiro que abri para leitura
	
}

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Marco Verdial    0
Marco Verdial

Este é o meu ficheiro funções.c onde imprimo o vetor

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "funcoes.h"



void imprimir (alunos aluno[], int n)
{
	int i;
	
	for (i=0;i<n;i++)
	{
		printf ("\nNumero: %d", aluno[i].numero);
		printf ("\nNome: %s\n", aluno[i].nome);
	}
}

 

Este é o meu funções.h

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct alunos
{
	int numero;
	char nome[25];
}	alunos;


void imprimir (alunos aluno[], int n);

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

o que vejo é o problema de sempre : leitura correcta de dados formatados (onde se encaixa a limpeza do buffer)

vamos ver se respondes bem a esta questão : para que caracter do ficheiro fica o ponteiro interno da tua stream após ler o número do aluno ?


IRC : sim, é algo que ainda existe >> #p@p

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.