Ir ao conteúdo

Posts recomendados

Postado
#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

Postado

@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:

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!