Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

Desafio: Simulador de pedidos em uma cafeteria

Olá, boa noite!

Esse deu trabalho, mas saiu. Os desafios são ótimos e aprendemos bastante

Proposta de solução, mas sempre disponível para outras abordagens.

Código gerado no DEV-C++

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

main(){
int qtd, i;
float valor[50], soma, total, desconto=0.10;
char nome[50], texto = 'S';

//Cabeçalho e dados iniciais
printf("**********SIMULADOR DE PEDIDOS EM UMA CAFETARIA**********\n\n");
printf("Nome do cliente: ");
gets(&nome[i]);
printf("\n\n");

printf("Qual a quantidade de itens/produtos? ");
scanf("%i", &qtd);
if (qtd>50){
  printf("Desculpe, este programa lida no maximo com 50 itens\n\n");
}
  else{
   printf("\n\n");
   printf("Entre com o nome e o valor de cada produto:\n\n");

// inicializando variaveis...	
   
   for(i=0; i<qtd; i++){
     printf("Informe o nome do produto %i: ", i+1);
     scanf("%s", &nome[i]);   
     printf("Informe o valor do produto %i: ", i+1);
     scanf("%f", &valor[i]);   
   
   //Cálculo do valor total 
     soma= soma+valor[i];
       }
   
   printf("-----------------------------------------\n\n");
   printf("O subtotal dos produtos eh R$: %.2f\n\n", soma);

   //Sistemática do desconto de 10% para o cliente, caso seja cadastrado 
   printf("O cliente tem cadastro - [S/N] - ? ");
   scanf(" %c", &texto);
   if (texto == 'S') {
           total = soma - soma*desconto;
           printf("\n\n");
        printf("O valor total a pagar com desconto eh R$: %.2f\n\n", total);
    } else {
        printf("\n\n");
        printf("O valor total a pagar eh R$: %.2f\n\n", soma);
    }
}
//Fim do programa 
printf("*****************Volte Sempre!*****************\n");
printf("\n\n");
system("pause");
}

Grato,
Gil

2 respostas
solução!

Oii Gil, tudo bem?

Obrigada por compartilhar sua solução no fórum! É ótimo ver que o desafio rendeu aprendizado, e a estrutura do seu código está bem organizada, com o cabeçalho, o loop para entrada dos produtos e a lógica do desconto funcionando juntos.

Tenho algumas considerações que podem ser úteis:

A variável i é usada como índice no gets(&nome[i]) antes de ter qualquer valor definido. Isso pode causar comportamento inesperado, já que i não foi inicializado antes desse ponto. Uma alternativa simples é usar um array separado para o nome do cliente:

char nomeCliente[50];
printf("Nome do cliente: ");
scanf("%s", nomeCliente);

Outro ponto: a variável soma também não é inicializada antes do loop. Em C, variáveis locais não inicializadas contêm lixo de memória, o que pode corromper o resultado. Vale adicionar soma = 0; antes do for.

E uma última observação: gets() é considerada uma função insegura em C (foi até removida do padrão C11), porque não verifica o limite do buffer. O scanf("%s", ...) ou fgets() são alternativas mais seguras para leitura de strings.

Mas no geral, parabéns por encarar o desafio e por trazer a solução para o fórum. Isso com certeza vai ajudar outros alunos que estiverem no mesmo ponto.

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade

Bom dia Victor,

Muito obrigado pelas dicas e por compartilhar conhecimento, que são sempre bem-vindos e valiosos.

Implementei com o fgets porque o scanf não permitia nome + sobrenome, por exemplo.

Ajustes realizados no algoritmo, nova versão descrita abaixo:

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

main(){
int qtd, i;
float valor[50], soma, total, desconto=0.10;
char nome[50], texto = 'S';
char nomeCliente[50];

//Cabeçalho e dados iniciais
printf("**********SIMULADOR DE PEDIDOS EM UMA CAFETARIA**********\n\n");

printf("Nome do cliente: ");
    if (fgets(nomeCliente, sizeof(nomeCliente), stdin) != NULL)       
printf("\n\n");

printf("Qual a quantidade de itens/produtos? ");
scanf("%i", &qtd);
    if (qtd>50){
  printf("Desculpe, este programa lida no maximo com 50 itens\n\n");
}
    else{
   printf("\n\n");
   printf("Entre com o nome e o valor de cada produto:\n\n");

// inicializando variaveis...	
   soma=0;
   
   for(i=0; i<qtd; i++){
     printf("Informe o nome do produto %i: ", i+1);
     scanf("%s", &nome[i]);   
     printf("Informe o valor do produto %i: ", i+1);
     scanf("%f", &valor[i]);   
   
   //Cálculo do valor total 
     soma= soma+valor[i];
       }
   
   printf("-----------------------------------------\n\n");
   printf("O subtotal dos produtos eh R$: %.2f\n\n", soma);

   //Sistemática do desconto de 10% para o cliente, caso seja cadastrado 
   printf("O cliente tem cadastro - [S/N] - ? ");
   scanf(" %c", &texto);
   if (texto == 'S') {
           total = soma - soma*desconto;
           printf("\n\n");
        printf("O valor total a pagar com desconto eh R$: %.2f\n\n", total);
    } else {
        printf("\n\n");
        printf("O valor total a pagar eh R$: %.2f\n\n", soma);
    }
}
//Fim do programa 
printf("*****************Volte Sempre!*****************\n");
printf("\n\n");
system("pause");
}

Grato,
Gil