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

[RESOLVIDO]Ajuda para busca dentro de struct


ABYDABI

Pergunta

URGENTE.

 

Bom, estou tendo dificuldade de finalizar o este algoritmo, pois a funcao 3 do menu não funciona perfeitamente, pois ela le a entrada de dado mas não relaciona com o dado exato que esta armazenado dentro da lista feita pelo struct.

O objetivo do programa e criar um programa que se utilize-se de struct para armazenamentos de dados, que contenha as funções cadastro(produto, valor e código), imprima a lista, busque por nome de produto para uma loja de materiais.

esta e a parte q não consigo resolver:

  void imp_cod(){
                fflush(stdin);
                int i;
                char aux[80];
                 printf("DIGITE O NOME DO PRODUTO A BUSCAR");
                 scanf("%s",&aux[80]);
                      for(int i=0;i<qte;i++){
                              if(aux[80]==lj[qte].nome_p);
                              
                              printf("COD:%dNOME:%sR$%.2f",lj.cod_e,lj.nome_p,lj.valor);
                          }
                          }

Este e o código "completo":

#include<iostream>
#include<locale.h>

struct estoque{
       int cod_e;
       char nome_p[80];
       float valor;
       };
       
       estoque lj[50];
       int qte=0;
       
       void cadastro(){
            fflush(stdin);
            printf("\t+------------------------------------------------------+\n");
            printf("\t              DIGITE O CODIGO DO PRODUTO  ");
            scanf("\t%d",&lj[qte].cod_e);
           
             fflush(stdin);
            printf("\t+------------------------------------------------------+\n");
            printf("\t               DIGITE O NOME DO PRODUTO  ");
            gets(lj[qte].nome_p);
             fflush(stdin);
            printf("\t+------------------------------------------------------+\n");
            printf("\t           DIGITE O VALOR UNITARIO DO PRODUTO  R$");
            scanf("%f",&lj[qte].valor);
            printf("\t+------------------------------------------------------+\n");
            fflush(stdin);
            qte++;
            }
            
            void imp_es(){
                fflush(stdin);
                 for(int i; i<qte; i++){
                          printf("\n\t+------------------------------------+\n");
                         printf("\tCODIGO:  %d\n\tNOME:    %s\n\tVALOR:   R$%.2f\n", lj.cod_e, lj.nome_p, lj.valor);
                         printf("\t+------------------------------------+\n");
                         }
                         }
                         
            void imp_cod(){
                fflush(stdin);
                int i;
                char aux[80];
                 printf("DIGITE O NOME DO PRODUTO A BUSCAR");
                 scanf("%s",&aux[80]);
                      for(int i=0;i<qte;i++){
                              if(aux[80]==lj[qte].nome_p);
                              
                              printf("COD:%dNOME:%sR$%.2f",lj.cod_e,lj.nome_p,lj.valor);
                          }
                          }
        
        int menu(int op){
            system("cls");
    printf("\t+------------------------------------------------------+\n");
    printf("\t|                        MENU                          |\n");
    printf("\t+------------------------------------------------------+\n");
    printf("\t|               1 - CADASTRAR PRODUTO                  |\n");
    printf("\t|                    2 - ESTOQUE                       |\n");
    printf("\t|                3 - BUSCAR PRODUTO                    |\n");
    printf("\t|                      4 - SAIR                        |\n");
    printf("\t+------------------------------------------------------+\n");
    printf("\t|                  DIGITE A OPERAÇÂO                   |\n");
    printf("\t+------------------------------------------------------+\n");
    scanf("%d",&op);
    return(op);
        }
        
        


main(){
    setlocale(LC_ALL,"");
       int op;
       
       printf("\t+------------------------------------------------------+\n");
       printf("\t|          BEM VINDO AO CONTROLE DE ESTOQUE            |\n");
       printf("\t+------------------------------------------------------+\n");
       printf("\t|        APERTE QUALQUER TECLA PARA CONTINUAR          |\n");
       printf("\t+------------------------------------------------------+\n");
    
       system("pause");
       do{
           op=menu(op);
           if(op==1){
                     cadastro();}
           else if(op==2){
                     imp_es();
                     system("pause");
                                     }
            else if(op==3){
                      imp_cod();
                      system("pause");
                                     }    
      else if(op==4){
           system("cls_clear");
           return 0;}
                       
       }while(op!=4);
           
system("pause");       
}

 

 

Agradeço se alguém puder ajudar :D

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

4 respostass a esta questão

Posts Recomendados

  • 0

Ola, você não pode comparar strings igual compara numeros.

 

Use a função "strcmp()" da biblioteca string.h, onde retornará valor 0 (zero), caso sejam iguais.

Ficaria:

if ( strcmp(aux, lj[qte].nome_p) == 0 );{
printf("COD:%dNOME:%sR$%.2f",lj.cod_e,lj.nome_p,lj.valor);
} else {
printf ("\nProduto nao encontrado!\n");
}

 

Não esqueça de adicionar a biblioteca string.h no inicio do código...

Testa ai e nos avise, qualquer duvida só perguntar.

Link para o comentário
Compartilhar em outros sites

  • 0

então utilizei conforme você falou, mas quando compilo o programa no dev, e cadastro o produto e dps vou procurar ele não acha nenhum, vai direto para o else.


               void imp_cod(){
                fflush(stdin);
                int i;
                char aux[80];
                 printf("\tDIGITE O NOME DO PRODUTO A BUSCAR:  ");
                
                fgets(aux,80,stdin);
                 fflush(stdin);
                 for(int i=0;i<aux;i++){
                    if ( strcmp(aux,lj.nome_p)==0 ){
                    printf("\tCODIGO:  %d\t\nNOME:  %s\t\nVALOR:  R$%.2f",lj.cod_e,lj.nome_p,lj.valor);
                        } 
                    else {
                    printf ("\nProduto não encontrado!\n");
                    }
                
                }
                    }    

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

  • 0

Segue o código funcionando. 

 

#include<iostream>
#include<locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct estoque{
       int cod_e;
       char nome_p[80];
       float valor;
       };

       estoque lj;
       int qte=0;

       void cadastro(){
            fflush(stdin);
            printf("\t+------------------------------------------------------+\n");
            printf("\t              DIGITE O CODIGO DO PRODUTO  ");
            scanf("\t%d",&lj.cod_e);

             fflush(stdin);
            printf("\t+------------------------------------------------------+\n");
            printf("\t               DIGITE O NOME DO PRODUTO  ");
            gets(lj.nome_p);
             fflush(stdin);
            printf("\t+------------------------------------------------------+\n");
            printf("\t           DIGITE O VALOR UNITARIO DO PRODUTO  R$");
            scanf("%f",&lj.valor);
            printf("\t+------------------------------------------------------+\n");
            fflush(stdin);
            qte++;
            }

            void imp_es(){
                fflush(stdin);
                 for(int i; i<qte; i++){
                         printf("\n\t+------------------------------------+\n");
                         printf("\tCODIGO:  %d\n\tNOME:    %s\n\tVALOR:   R$%.2f\n", lj.cod_e, lj.nome_p, lj.valor);
                         printf("\t+------------------------------------+\n");
                         }
                         }


            void imp_cod(){
                fflush(stdin);
                int i;
                char aux[50];
                 printf("DIGITE O NOME DO PRODUTO A BUSCAR");
                 scanf("%s",&aux[80]);
                      for(int i=0;i<qte;i++){
                            if ( strcmp(aux, lj.nome_p) == 0 );
                             // if(aux[80]==lj.nome_p);
                             printf("\ncomparacao ok!\n");
                              printf("COD:%d NOME:%s R$ %.2f",lj.cod_e,lj.nome_p,lj.valor);
                          }
                          }

        int menu(int op){
            system("cls");
    printf("\t+------------------------------------------------------+\n");
    printf("\t|                        MENU                          |\n");
    printf("\t+------------------------------------------------------+\n");
    printf("\t|               1 - CADASTRAR PRODUTO                  |\n");
    printf("\t|                    2 - ESTOQUE                       |\n");
    printf("\t|                3 - BUSCAR PRODUTO                    |\n");
    printf("\t|                      4 - SAIR                        |\n");
    printf("\t+------------------------------------------------------+\n");
    printf("\t|                  DIGITE A OPERAÇÂO                   |\n");
    printf("\t+------------------------------------------------------+\n");
    scanf("%d",&op);
    return(op);
        }




main(){
    setlocale(LC_ALL,"");
       int op;

       printf("\t+------------------------------------------------------+\n");
       printf("\t|          BEM VINDO AO CONTROLE DE ESTOQUE            |\n");
       printf("\t+------------------------------------------------------+\n");
       printf("\t|        APERTE QUALQUER TECLA PARA CONTINUAR          |\n");
       printf("\t+------------------------------------------------------+\n");

       system("pause");
       do{
           op=menu(op);
           if(op==1){
                     cadastro();}
           else if(op==2){
                     imp_es();
                     system("pause");
                                     }
            else if(op==3){
                      imp_cod();
                      system("pause");
                                     }
      else if(op==4){
           system("cls_clear");
           return 0;}

       }while(op!=4);

system("pause");
}

 

Removi todos os [qte] da frente do lj.

Qual era o motivo de estar utilizando-o?

 

Link para o comentário
Compartilhar em outros sites

  • 0

Estou usando o qte para agregar valor para a variavel.

consegui resolver o codigo,

Obrigado pela ajuda :D

Segue o codigo funcional como o meu professor pediu

#include<iostream>
#include<locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct estoque{
       int cod_e;
       char nome_p[80];
       float valor;
       };
       
       estoque lj[150];
       int qte=0;
       
       void cadastro(){
            fflush(stdin);
            printf("\t+------------------------------------------------------+\n");
            printf("\t              DIGITE O CODIGO DO PRODUTO  ");
            scanf("\t%d",&lj[qte].cod_e);
           
             fflush(stdin);
            printf("\t+------------------------------------------------------+\n");
            printf("\t               DIGITE O NOME DO PRODUTO  ");
            gets(lj[qte].nome_p);
             fflush(stdin);
            printf("\t+------------------------------------------------------+\n");
            printf("\t           DIGITE O VALOR UNITARIO DO PRODUTO  R$");
            scanf("%f",&lj[qte].valor);
            printf("\t+------------------------------------------------------+\n");
            fflush(stdin);
            qte++;
            }
            
            void imp_es(){
                fflush(stdin);
                 for(int i; i<qte; i++){
                          printf("\n\t+------------------------------------+\n");
                         printf("\tCODIGO:  %d\n\tNOME:    %s\n\tVALOR:   R$%.2f\n", lj.cod_e, lj.nome_p, lj.valor);
                         printf("\t+------------------------------------+\n");
                         }
                         }
      
            void imp_cod(){
                fflush(stdin);
                int i;
                char aux[50];
                 printf("DIGITE O NOME DO PRODUTO A BUSCAR");
                 scanf("%s",&aux[50]);
                      for(int i=0;i<qte;i++){
                            if ( strcmp(aux, lj.nome_p) == 0 );
                             // if(aux[80]==lj.nome_p);
                             printf("\ncomparacao ok!\n");
                              printf("COD:%d NOME:%s R$ %.2f",lj.cod_e,lj.nome_p,lj.valor);
                          }
                          }
        
        int menu(int op){
            system("cls");
    printf("\t+------------------------------------------------------+\n");
    printf("\t|                        MENU                          |\n");
    printf("\t+------------------------------------------------------+\n");
    printf("\t|               1 - CADASTRAR PRODUTO                  |\n");
    printf("\t|                    2 - ESTOQUE                       |\n");
    printf("\t|                3 - BUSCAR PRODUTO                    |\n");
    printf("\t|                      4 - SAIR                        |\n");
    printf("\t+------------------------------------------------------+\n");
    printf("\t|                  DIGITE A OPERAÇÂO                   |\n");
    printf("\t+------------------------------------------------------+\n");
    scanf("%d",&op);
    return(op);
        }
        
        


main(){
    setlocale(LC_ALL,"");
       int op;
       
       printf("\t+------------------------------------------------------+\n");
       printf("\t|          BEM VINDO AO CONTROLE DE ESTOQUE            |\n");
       printf("\t+------------------------------------------------------+\n");
       printf("\t|        APERTE QUALQUER TECLA PARA CONTINUAR          |\n");
       printf("\t+------------------------------------------------------+\n");

       system("pause");
       do{
           op=menu(op);
           if(op==1){
                     cadastro();}
           else if(op==2){
                     imp_es();
                     system("pause");
                                     }
            else if(op==3){
                      imp_cod();
                      system("pause");
                                     }    
      else if(op==4){
           system("cls_clear");
           return 0;}
                       
       }while(op!=4);
           
system("pause");       
}
        

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...