Jump to content
Marco Verdial

fgets para estrutura (dados no ficheiro)

Recommended Posts

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
	
}

 

Share this post


Link to post
Share on other sites
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);

 

Share this post


Link to post
Share on other sites
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 ?

  • Vote 1

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.