Jump to content

Ajuda... preciso fazer com que a escolha dos bolos seja pelo codigo que é digitado no "digite o codigo do bolo" mas nao consigo 🥲


Brenda Nunes
 Share

Recommended Posts

#include <stdio.h>
#include <stdlib.h>

#define limparTela system("cls") 

typedef struct {
    int codigo;
    char nome [100];
    char ingrediente[100];
    double valor;
} Bolo_t;

typedef struct {
    int codigo;
    int codigoBolos[100];
    double valorTotal;
} Pedido_t;

int main() {
    const int quantidadeMaximaBolo = 100; 

    int posicaoBolo = 0;                  
    int posicaoBoloPedido = 0;            
    int codigoBolo = 0; 
char nomedobolo [100] ;                 

    Bolo_t bolos[quantidadeMaximaBolo]; 

    Pedido_t pedido;                       

    char opcao = ' ';                      

    do {
        limparTela;
        printf("MENU \n");
        printf("[ 1 ] - Cadastrar Bolo \n");
        printf("[ 2 ] - Fazer pedido \n");
        printf("[ 0 ] - Sair \n");
        printf("> ");
        scanf(" %c", &opcao);

        switch (opcao) {
            case '1':  
                limparTela;
                printf("NOVO BOLO \n");
                printf("Nome do bolo: ");
                scanf(" %[^\n]s", nomedobolo);
                printf("digite o codigo do bolo: ");
                scanf(" %[^\n]s", bolos[posicaoBolo].nome);
                printf("Valor: R$ ");
                scanf(" %lf", &bolos[posicaoBolo].valor);
               

                bolos[posicaoBolo].codigo = posicaoBolo + 1;    
                posicaoBolo += 1;
                break;

            case '2':  
                limparTela;
                if (posicaoBolo == 0) {
                    printf("Nao tem bolo cadastrado \n");

                    if (getchar() == '\n') {
                        getchar();
                    }

                    break;
                }

               
                do {
                    printf("Digite o nome/codigo do bolo %s caso nao queira mais bolos digite 0", nomedobolo, bolos[posicaoBolo].nome );
                    scanf(" %i", &codigoBolo);

                    if (codigoBolo > 0 && codigoBolo <= posicaoBolo) {
                        pedido.codigoBolos[posicaoBoloPedido] = codigoBolo;
                        pedido.valorTotal += bolos[codigoBolo - 1].valor;
                        posicaoBoloPedido += 1;
                    }
                } while (codigoBolo != 0 && posicaoBoloPedido < 100);
               
                pedido.codigo = 1;
                break;
        }
    } while (opcao != '0');

    limparTela;
    printf("--------------------------------------------- \n");
    printf("PEDIDO \n");
    printf("Codigo: %i \n", pedido.codigo);
    printf(" Valor: R$ %.2f \n", pedido.valorTotal);
    printf("--------------------------------------------- \n");

    return 0;
}

Link to comment
Share on other sites

Posted (edited)

Olá, Brenda. Tudo bem ?

Bom, pelo que eu entendi, você quer pesquisar seu bolo pelo código, certo ?
Como não especificou qual tipo de código então entendo que ele é somente string, ainda mais pelo tipo que você colocou na struct. Portanto só tem uma maneira de fazer isso que é iterar pelo seu vetor de bolos. 
 

Bolo_t bolos[quantidadeMaximaBolo];

Tem várias maneiras de fazer isso. Eu faria uma inicialização do vetor de Bolo_t. Assim vc poderia iterar e checar essa opção. 
Ou você pode manter desse jeito ai mesmo e só checar se o .nome é vazio. E para isso você pode adicionar a header. <string.h>, fica mais fácil de mexer nas strings com as funções respectivas.

Eu fiz algumas modificações no seu código. mas no geral seria isso. Primeiro limpo o nomebolo para buscar por ele, depois comparo com as funções de string para ver se não tá vazio ou é 0. Depois faço um loop-for para iterar pelo seu vector de Bolo_t. O nome sendo igual ao digitado eu paro o loop-for e mostro o resultado.
 

//cleaning nomedobolo
nomedobolo[0] = '\0';
do {
  // bolos[posicaoBolo].nome
  printf("Digite o nome/codigo do bolo %s caso nao queira mais bolos digite 0: ", nomedobolo);
  scanf(" %s[^\n]", nomedobolo);

  if(strcmp(nomedobolo, "0") == 0 || strlen(nomedobolo) <= 0){
    printf("skipping. %s", nomedobolo);
    break;
  }

  for(int o=0;o<quantidadeMaximaBolo;o++){
    if(strcmp(bolos[o].nome, nomedobolo)){
      printf("\n-------Encontrado-------\nSeu bolo.. foi encontrado. posição %i. %s \n\n", o, bolos[o].nome);
      //bolos[0].nome e etc...
      break;
    }
  }
} while (1);


Caso alguma coisa não tenha ficado clara só falar. Abs!

Edited by Pimptech
Link to comment
Share on other sites

Em 10/05/2022 em 19:52, Pimptech disse:

Olá, Brenda. Tudo bem ?

Bom, pelo que eu entendi, você quer pesquisar seu bolo pelo código, certo ?
Como não especificou qual tipo de código então entendo que ele é somente string, ainda mais pelo tipo que você colocou na struct. Portanto só tem uma maneira de fazer isso que é iterar pelo seu vetor de bolos. 
 

Bolo_t bolos[quantidadeMaximaBolo];

Tem várias maneiras de fazer isso. Eu faria uma inicialização do vetor de Bolo_t. Assim vc poderia iterar e checar essa opção. 
Ou você pode manter desse jeito ai mesmo e só checar se o .nome é vazio. E para isso você pode adicionar a header. <string.h>, fica mais fácil de mexer nas strings com as funções respectivas.

Eu fiz algumas modificações no seu código. mas no geral seria isso. Primeiro limpo o nomebolo para buscar por ele, depois comparo com as funções de string para ver se não tá vazio ou é 0. Depois faço um loop-for para iterar pelo seu vector de Bolo_t. O nome sendo igual ao digitado eu paro o loop-for e mostro o resultado.
 

//cleaning nomedobolo
nomedobolo[0] = '\0';
do {
  // bolos[posicaoBolo].nome
  printf("Digite o nome/codigo do bolo %s caso nao queira mais bolos digite 0: ", nomedobolo);
  scanf(" %s[^\n]", nomedobolo);

  if(strcmp(nomedobolo, "0") == 0 || strlen(nomedobolo) <= 0){
    printf("skipping. %s", nomedobolo);
    break;
  }

  for(int o=0;o<quantidadeMaximaBolo;o++){
    if(strcmp(bolos[o].nome, nomedobolo)){
      printf("\n-------Encontrado-------\nSeu bolo.. foi encontrado. posição %i. %s \n\n", o, bolos[o].nome);
      //bolos[0].nome e etc...
      break;
    }
  }
} while (1);


Caso alguma coisa não tenha ficado clara só falar. Abs!

ola eu ainda estou confuso com o que você disse comecei a mexer com c++ agora e estou fazendo este código oq tenho que fazer é no final onde diz "digite o codigo do bolo" tenha que realmente digitar o código dito na primeira parte e não seja em ordem igual esta agora 

 

outra coisa eu não consigo fazer com que apareça os nomes dos bolos selecionados no final do código como exemplo 

 

"pedido

 

codigo:1

 

valor: 20

 

bolos pedidos : laranja, chocolate, cafe

 

"

Link to comment
Share on other sites

On 5/17/2022 at 1:58 PM, Brenda Nunes said:

ola eu ainda estou confuso com o que você disse comecei a mexer com c++ agora e estou fazendo este código oq tenho que fazer é no final onde diz "digite o codigo do bolo" tenha que realmente digitar o código dito na primeira parte e não seja em ordem igual esta agora 

 

outra coisa eu não consigo fazer com que apareça os nomes dos bolos selecionados no final do código como exemplo 

 

"pedido

 

codigo:1

 

valor: 20

 

bolos pedidos : laranja, chocolate, cafe

 

"

Olá, Brenda. Td bem ?
Você chegou a rodar o código que eu enviei no post anterior ?

Esse trecho aqui:
 

for(int o=0;o<quantidadeMaximaBolo;o++){
    if(strcmp(bolos[o].nome, nomedobolo)){
      printf("\n-------Encontrado-------\nSeu bolo.. foi encontrado. posição %i. %s \n\n", o, bolos[o].nome);
      //bolos[0].nome e etc...
      break;
    }
  }

Faz uma iteração pelo vector de bolos. Se você remover o if você vai conseguir iterar por todos os bolos cadastrados.

E para receber código é a mesma coisa. Acertar os lugares que você grava isso na estrutura e depois alterar essa parte.

// bolos[posicaoBolo].nome
  printf("Digite o nome/codigo do bolo %s caso nao queira mais bolos digite 0: ", nomedobolo);
  scanf(" %s[^\n]", nomedobolo);

Essa parte recebe o código.. e pode usar o if de cima para compara com o código e não com o nome.

Eu acho que esse exemplo que eu te enviei tem a maneira como você pode fazer tudo. 🤔

  • Curtir 1
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
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  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

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...