Ir ao conteúdo

C Analisem meu código em C.


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Sou bem iniciante em C e eu gostaria de saber o que posso melhorar no meu código, um menu simples de uma sorveteria.

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

int main() {

  int escolhas = 0;
  char tam[5], cod[5], soma[5], per;
  

  printf("Bem-vindo à sorveteria Ice Cube.\n");
  printf("-----------------------------------------------------------\n");
  printf("¦Código ¦  Descrição  ¦ Tamanho P ¦ Tamanho M ¦ Tamanho G ¦\n");
  printf("¦  TR   ¦ Tradicional ¦  R$6.00   ¦   R$10.00 ¦   R$18.00 ¦\n");
  printf("¦  ES   ¦   Especial  ¦  R$7.00   ¦   R$12.00 ¦   R$21.00 ¦\n");
  printf("¦  PR   ¦   Premium   ¦  R$8.00   ¦   R$14.00 ¦   R$24.00 ¦\n");
  printf("-----------------------------------------------------------\n");

  while (1) {
    printf("Entre com o tamanho do pote de sorvete desejado (P/M/G):\n");
    scanf(" %1s", tam);
    printf("Entre com o código do pote de sorvete desejado (TR/ES/PR):\n");
    scanf(" %2s", cod);

    strcat(tam, cod);

    if (strcmp(tam,"PTR") == 0) {
      printf("Você pediu um sorvete sabor TRADICIONAL P de R$6.00\n");
      escolhas = escolhas + 6;
      
    }
      
    else if (strcmp(tam,"PES") == 0) {
      printf("Você pediu um sorvete sabor ESPECIAL P de R$7.00\n");
      escolhas = escolhas + 7;

      }
    
    else if (strcmp(tam,"PPR") == 0) {
      printf("Você pediu um sorvete sabor PREMIUM P de R$8.00\n");
      escolhas = escolhas + 8;

      }
    
    else if (strcmp(tam,"MTR") == 0) {
      printf("Você pediu um sorvete sabor TRADICIONAL M de R$10.00\n");
      escolhas = escolhas + 10;
      
      }
    
    else if (strcmp(tam,"MES") == 0) {
      printf("Você pediu um sorvete sabor ESPECIAL M de R$12.00\n");
      escolhas = escolhas + 12;

      }
   
    else if (strcmp(tam,"MPR") == 0) {
      printf("Você pediu um sorvete sabor PREMIUM M de R$14.00\n");
      escolhas = escolhas + 14;

      }

    else if (strcmp(tam,"GTR") == 0) {
      printf("Você pediu um sorvete sabor TRADICIONAL G de R$18.00\n");
      escolhas = escolhas + 18;
      
      }
    
    else if (strcmp(tam,"GES") == 0) {
      printf("Você pediu um sorvete sabor ESPECIAL G de R$21.00\n");
      escolhas = escolhas + 21;

      }
   
    else if (strcmp(tam,"GPR") == 0) {
      printf("Você pediu um sorvete sabor PREMIUM G de R$24.00\n");
      escolhas = escolhas + 24;

      }

    printf("Deseja pedir mais algum sorvete? (S/N)\n");
    scanf(" %c", &per);
    if (per == 'S') {
      continue;
    }
    else {
      break;
      
    }
      

   }

  printf("Os pedidos foram realizados com sucesso. O valor total foi de R$%d,00.", escolhas);

  return 0;
}

 

  • Solução
Postado

@Endmmans Em vez de testar strings e fazer o cálculo com números constantes para cada um, acho mais simples usar arranjos/matriz para armazenar os tamanhos e valores. Assim poderá passar a posição e usar nos cálculos, p.ex,

 

#include <stdio.h>

int main(void){
    int codigo = 0;
    int tamanho = 0;
    float total = 0;
    float preco[3][3] = {
        {6, 10, 18},
        {7, 12, 21},
        {8, 14, 24}
    };
    const char *tipo[3] = {
        "Tradicional",
        "Especial",
        "Premium"
    };
    
    puts(
        "Bem-vindo à sorveteria Ice Cube (-1 para sair).\n"
        "-----------------------------------------------------------\n"
        "¦Código ¦  Descricao  ¦  (0) P    ¦   (1) M   ¦   (2) G   ¦\n"
        "¦  0    ¦ Tradicional ¦  R$6.00   ¦   R$10.00 ¦   R$18.00 ¦\n"
        "¦  1    |   Especial  ¦  R$7.00   ¦   R$12.00 ¦   R$21.00 ¦\n"
        "¦  2    ¦   Premium   ¦  R$8.00   ¦   R$14.00 ¦   R$24.00 ¦\n"
        "-----------------------------------------------------------\n"
    );

    while(codigo >= 0){
        puts("Entre com o codigo e coluna: ");
        scanf("%d, %d", &codigo, &tamanho);
        if(codigo >= 0 && codigo <= 2){
            printf(
                "Você pediu um sorvete sabor %s de R$ %.2f\n",
                tipo[codigo], preco[codigo][tamanho]
            );
            total += preco[codigo][tamanho];
        }
    }
    
    printf(
        "Os pedidos foram realizados com sucesso."
        " O valor total foi de R$ %.2f\n", total
    );
    return 0;
}

 

A relação de preço e tamanho fica na tabela 3x3 e a entrada recebe a posição. Ainda dá para aplicar mais testes para o retorno do scanf e os valores das entradas para ver se são válidos.

  • Curtir 1
  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!