Jump to content
Margarida Sousa

ler ficheiro e carregar para estrutura

Recommended Posts

Margarida Sousa

Boa noite, 

Queria ler um ficheiro de texto em c e posteriormente carregar para uma estrutura os dados que tenho no ficheiro.

A estrutura que tenho é esta:

struct doc{
char titulo[50];
char resumo[500];
}

---------------------------------------------------------

o meu doc.txt tem a seguinte estrutura:

titulo exemplo

conteudo exemplo

----------------------------------------------------------

para ler a primeira linha eu sei fazer(código em baixo) mas eu queria ler a primeira linha e adicionar a variável titulo e a segunda linha adicionar a variável resumo, podem-me ajudar?

FILE *fp;
    const int BUFFER_SIZE = 60;
    char str[BUFFER_SIZE];
    
    fp = fopen("texto.txt", "r");
    if(fp == NULL){
        perror("erro a abrir ficheiro");
        return (-1);
    }
    if(fgets(str, BUFFER_SIZE, fp) != NULL){
        puts(str);
    }
    
    
    fclose(fp);

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

tanto a variável str como o parametro titulo e resumo da estrutura são arrays. assin sendo, a maneira de leitura para a estrutura é a mesma que estas a usar de ler para str.

struct doc documento;

if (fgets(documento.titulo, 50, fp) != NULL && fgets(documento.resumo, 500, fp) != NULL) {
  printf("titulo : %s\nresumo : %s\n", documento.titulo, documento.resumo);
}

 

Edited by HappyHippyHippo
  • Vote 1

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

Share this post


Link to post
Share on other sites
Margarida Sousa

e se quiser armazenar um inteiro? é da mesma forma?

struct doc{

char titulo[50];

char resumo[500];

int tamanho;

}

 

Share this post


Link to post
Share on other sites
Margarida Sousa

fica assim?

if (fgets(documento.titulo, 50, fp) != NULL && fgets(documento.conteudo, 500, fp) != NULL && fscanf(fp, "%d", documento.tamanho) !=NULL){
        printf("titulo : %s\nresumo : %s\nTamanho: %d", documento.titulo, documento.conteudo, documento.tamanho);
}

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

olha bem para o formato que eu disse para usar, e depois o fscanf retorna o numero de argumentos lidos, logo deverás verificiar se leu 1 argumento e não usar o NULL


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

Share this post


Link to post
Share on other sites
Margarida Sousa

Estou a usar o formato que disseste

fscanf(fp, "%d\n", &documento.tamanho) == 1

Edited by Margarida Sousa

Share this post


Link to post
Share on other sites
HappyHippyHippo

agora está mais parecido, no entanto ainda falta uma coisa : um espaço entre a abertura das aspas e o caracter de percentagem


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.