Jump to content
joanacs

Como passar informação de um ficheiro para um vetor dinâmico de estruturas em C?

Recommended Posts

joanacs

Boa tarde!
Estou a fazer um trabalho em linguagem `C`, onde tenho de mostrar na consola a informação guardada num ficheiro de texto, mas é obrigatório passar toda a informação para `vetores` dinâmicos de estruturas.
Eu penso já ter conseguido feito alguma coisa, mas quando tento guardar a especialidade numa `variável`, o ficheiro acaba por guardar as palavras seguintes.

Ex: O `v->nome` está a guardar "Joao Silva" e o `v->especialidade` está a guardar "Neurologia    9.30 - 17.00" e eu pretendo guardar apenas "Neurologia".
Alguém me consegue ajudar?

Citação

Ficheiro de texto:

Joao Silva
Neurologia    9.30 - 17.00
Ana Maria Santos
Pediatria    10.00 - 19.00
Sandra Almeida
Dermatologia    14.00 - 17.45

 

struct hora_entrada{int horas, minutos;};

    struct hora_saida{int horas, minutos;};

    typedef struct medico med, *p_med;
    struct medico{
    char nome[ST_TAM];
    char especialidade[ST_TAM];
    struct hora_entrada h_e;
    struct hora_saida h_s;
    };

    int le_dados (){
    FILE *f, *g;
    med *v;
    f=fopen("medico.txt", "rt");
    g=fopen("paciente.txt", "rt");
    if (f==NULL || g==NULL){
        printf("Erro no acesso ao ficheiro.\n");
        return 0;
    }
    v=malloc(sizeof(med));
    if (v==NULL){
        printf("Erro na alocaçao de memoria.\n");
        return 0;
    }
    while ((fscanf(f,"%49[^\n] %49[^\n]",v->nome, v->especialidade))==2 )
            printf("%s\n%s",v->nome, v->especialidade);
    fclose(f);
    }

 

Share this post


Link to post
Share on other sites
HappyHippyHippo
while (fscanf(f,
              "%49[^\n] %49s %d:%d-%d:%d\n",
              v->nome,
              v->especialidade,
              &v->h_e.horas,
              &v->h_e.minutos,
              &v->h_s.horas,
              &v->h_s.minutos) == 6)

 


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

Share this post


Link to post
Share on other sites
joanacs
29 minutos atrás, HappyHippyHippo disse:

while (fscanf(f,
              "%49[^\n] %49s %d:%d-%d:%d\n",
              v->nome,
              v->especialidade,
              &v->h_e.horas,
              &v->h_e.minutos,
              &v->h_s.horas,
              &v->h_s.minutos) == 6)

 

Obrigada pela sua resposta, mas fiz tudo exatamente como você disse e não apresentou nada na consola

Share this post


Link to post
Share on other sites
HappyHippyHippo

eu so escrevi a condição do ciclo, nao escrevi nenhum printf


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

Share this post


Link to post
Share on other sites
joanacs
5 horas atrás, HappyHippyHippo disse:

eu so escrevi a condição do ciclo, nao escrevi nenhum printf

e o printf seria assim "printf("%s %s %d %d %d %d\n",v->nome, v->especialidade, v->h_e.horas, v->h_e.minutos, v->h_s.horas, v->h_s.minutos);" ?

Share this post


Link to post
Share on other sites
joanacs
13 minutos atrás, HappyHippyHippo disse:

parece...

pois, também não percebo porque não está a dar :s

printf("\nMEDICOS\n");
    while (fscanf(f,"%49[^\n] %49s %d:%d-%d:%d",v->nome, v->especialidade, &v->h_e.horas, &v->h_e.minutos, &v->h_s.horas, &v->h_s.minutos )==6 )
            printf("%s %s %d %d %d %d\n",v->nome, v->especialidade, v->h_e.horas, v->h_e.minutos, v->h_s.horas, v->h_s.minutos);

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

mas o que aparece ? o que não aparece ? o que deveria aparecer ?

tensde ser um bocado mais específica na apresentação do problema, lembra-te que deste lado só existe a infomação que apresentas, e se não apresentas nada ...


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

Share this post


Link to post
Share on other sites
joanacs
3 horas atrás, HappyHippyHippo disse:

mas o que aparece ? o que não aparece ? o que deveria aparecer ?

tensde ser um bocado mais específica na apresentação do problema, lembra-te que deste lado só existe a infomação que apresentas, e se não apresentas nada ...

Peço desculpa...

O que aparece é apenas isto:

MEDICOS

 

 e o que deveria aparecer era

MEDICOS

Joao Silva
Neurologia 9.30 - 17.00

Share this post


Link to post
Share on other sites
miguel__1
Em 08/08/2017 às 19:39, joanacs disse:

 

Conseguis-te fazer para os pacientes?

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.