Ir para conteúdo
Fórum Script Brasil
  • 0

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


Savanna

Pergunta

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);
    
}

 

Editado por Savanna
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...