Ir para conteúdo

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

Posts Recomendados

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

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!

Editado por Pimptech
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

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

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...