Jump to content
Fórum Script Brasil
  • 0

Preciso de ajuda com gets () - Alguém consegue identificar o erro?


Question

Preciso criar um código onde eu armazene o nome de lojas, nome dos produtos e os preços dos produtos em cada uma das lojas em variáveis structs.

O erro acontece quando  na primeira volta do laço de repetição o gets não executa, ou seja, pula a solicitação do nome da segunda loja e já pede o preço dos produtos.

Agradeço quem puder me ajudar!

#include<stdio.h>
#include<string.h>

struct produto{
    char nome[50];
    float preço;
} p[1000] ;

struct loja{
    
    char nome[50];    
    struct produto;
    
} l[1000] ;

main(){
char escolha[50];        
int i=0,b,numprod,c; 

printf("= = = = Faca sua lista de compras e quando acabar digite ""fim"" = = = =\n\n");
do{
    printf("* ");
    struct produto;
      gets ( p.nome) ;
    strcpy(escolha, p.nome);
    i=i+1;    
}while(strcmp(escolha, "fim") != 0&&strcmp(escolha, "FIM") != 0);

numprod=i-1;
i=0;    


do{
    if(i==0){
        printf("= = = = Digite o nome de uma loja a ser pesquisada = = = =\n\n");
    }else{
        printf("= = Digite o nome da proxima loja a ser pesquisada ou [fim] para finalizar = =\n\n");
    }
    struct loja;
      gets ( l.nome) ;
      strcpy(escolha, l.nome);
    i=i+1;
    
    for(c=0;c<numprod;c++){
        printf("Digite o valor de ""%s"": R$ ",p[c].nome);
        scanf("%f",&p[c].preço);
    }
    
}while(strcmp(escolha, "fim") != 0&&strcmp(escolha, "FIM") != 0);
    
}

 

Edited by Savanna
Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

si você declarou p como um vetor p[1000] na linha gets ( p.nome ) ; o p.nome ta errado. O p.nome é um vetor e não uma variável normal, o correto seria p[x].nome, sendo o x o índice desejado.

Ademais use o botão <> para postar códigos-fonte

Link to post
Share on other sites
  • 0
16 horas atrás, vangodp disse:

si você declarou p como um vetor p[1000] na linha gets ( p.nome ) ; o p.nome ta errado. O p.nome é um vetor e não uma variável normal, o correto seria p[x].nome, sendo o x o índice desejado.

Ademais use o botão <> para postar códigos-fonte

Ah, obrigada! Eu não entendi muito bem sobre ter de definir a posição do p.nome no gets. Pois quando peço para o programa mostrar na tela ele mostra normalmente, assim: 

 for(c=0;c<numprod;c++){
        printf("Digite o valor de ""%s"": R$ ",p[c].nome);
        scanf("%f",&p[c].preço);
    }

Mas já consegui resolver o problema que tava atrapalhando. Era erro de buffer:

Se resolve colocando um fflush(stdin); antes do gets();

 

Link to post
Share on other sites
  • 0
Em 08/06/2019 em 17:18, Savanna disse:

Se resolve colocando um fflush(stdin); antes do gets();

Isso é errado, usar fflush junto com stdin. fflush foi concebido para ser usado com stdout, o fato de que funcione é pura sorte. Existe uma infinidade de formas sobre como limpar o buffer do teclado na internet.

acho que você deveria dar uma olhada aqui: https://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

É uma leitura indispensável já que lhe fará compreender melhor sobre o buffer do teclado, que é um problema que você vai se enfrentar a diário, por isso é indispensável. Recomendo ler com atenção e ir pondo em prática tudo o que for vendo neste post.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148692
    • Total Posts
      644525
×
×
  • Create New...