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

Marco Verdial

fgets para estrutura (dados no ficheiro)

3 mensagens neste tópico

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
	
}

 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mostra o código com a definição da estrutura alunos.  Usar o sizeof no fgets não me parece grande ideia, e ser parte do problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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);

 

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