Ir ao conteúdo
  • Cadastre-se
rsd_17

C Subprograma que le de um ficheiro

Recommended Posts

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


  struct _teatro {
    int assitencia;   
    float preco_bilhete;   
    char artist_banda[100]; 
};
  
  
  int preenchervetor(struct _teatro VilaReal[],int v){
        
  FILE *fp;
  int i=0;
  if((fp=fopen("TeatroVilaReal_Maio.txt","rt"))==NULL){
      printf("Erro na abertura do ficheiro");
  }else{
      
      while(!feof(fp)){
          fscanf(fp,"%d,%f,%s",&VilaReal.assitencia,&VilaReal.preco_bilhete,&VilaReal.artist_banda);
          
          printf("%d,%f,%s \n ",VilaReal.assitencia,VilaReal.preco_bilhete,VilaReal.artist_banda);
          i++;
      }
      
      fclose(fp);
      return 0;
      }
  
  }
  
 int main()  { 
    int v;
    v=50;
        struct _teatro VilaReal[v];
    
preenchervetor(VilaReal, v);
    
            
return 0;

 }  

 

Estou a tentar fazer esse ex.2 b mas nao faz o que quero imprime umas coisas estranhas, sera por o vetor ter 50 e o ficheiro so ter 2 elementos? 

aguardo ajuda 

1.png

2.png

3.png

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@rsd_17 Olá. Desculpa pela demora em responder. 

O problema é como você está lendo a string no arquivo, usando apenas o %s. Essa é a causa do erro.

Segue o código funcionando:

 

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

#define TAM 50

struct _teatro {
    int assitencia;
    float preco_bilhete;
    char artist_banda[100];
};


int preenchervetor(struct _teatro *VilaReal) {

    FILE *fp = NULL;
    int i;

    if ((fp = fopen("TeatroVilaReal_Maio.txt","rt")) == NULL) {
        printf("Erro na abertura do ficheiro");
    } else {
        i = 0;
        while(!feof(fp)){
            fscanf(fp,"%d, %f, %[^\n]s ",&VilaReal[i].assitencia, &VilaReal[i].preco_bilhete, VilaReal[i].artist_banda);
            printf("%d, %.2f, %s\n",VilaReal[i].assitencia, VilaReal[i].preco_bilhete, VilaReal[i].artist_banda);
            i++;
        }
        fclose(fp);
    }
}

int main() {

    struct _teatro VilaReal[TAM];

    preenchervetor(VilaReal);

    return 0;
}

perceba q no fscanf faço uso dessa formatação: %[^\n]s para ler a string. Nesse caso, se tiver espaços na string, como tem na segunda linha do arquivo, vai ser lida toda a string. Se usar só o %s vai ler apenas a primeira palavra, e isso está gerando esse erro.

Outro ponto. Você passou um vetor como parâmetro da função, e a função está preparada p receber um vetor. Mas dentro da função você não trata 'VilaReal' como vetor, e sim como sendo uma única variável.

Perceba a diferença nos códigos. :thumbsup:

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×