Jump to content
Fórum Script Brasil
  • 0

[RESOLVIDO]Ajuda para busca dentro de struct


ABYDABI
 Share

Question

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

Edited by ABYDABI
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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");
                    }
                
                }
                    }    

Edited by ABYDABI
Link to comment
Share on other 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 to comment
Share on other 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 to comment
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.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...