Brenda Nunes Posted May 5, 2022 Posted May 5, 2022 #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; } Quote
Pimptech Posted May 10, 2022 Posted May 10, 2022 (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 May 10, 2022 by Pimptech Quote
Brenda Nunes Posted May 17, 2022 Author Posted May 17, 2022 Oi eu precisava mostrar os nomes dos bolos pedidos no final sabe como posso fazer isso ? Obrigado pela ajuda Quote
Brenda Nunes Posted May 17, 2022 Author Posted May 17, 2022 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 " Quote
Pimptech Posted May 19, 2022 Posted May 19, 2022 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. ? 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.