C - Ajuda com a saída

Pessoal,

Minha primeira postagem. Espero ser a primeira de muitas, tanto como sendo ajudado, como ajudando.

Fiz um programa com a seguinte requisição:

"O Sr. Manoel Joaquim expandiu seus negócios para além dos negócios de 1,99 e agora possui uma loja de conveniências. Faça um programa que implemente uma caixa registradora rudimentar. O programa deverá receber um número desconhecido de valores referentes aos preços das mercadorias. Um valor zero deve ser informado pelo operador para indicar o final da compra. O programa deve então mostrar o total da compra e perguntar o valor em dinheiro que o cliente forneceu, para então calcular e mostrar o valor do troco. Após esta operação, o programa deverá voltar ao ponto inicial, para registrar a próxima compra. A saída deve ser conforme o exemplo abaixo:

Lojas Tabajara
Produto 1: R$ 2.20
Produto 2: R$ 5.80
Produto 3: R$ 0
Total: R$ 9.00
Dinheiro: R$ 20.00
Troco: R$ 11.00"

O código ficou assim:

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

int main()
{
float preco, troco, dinheiro, total;
int i;
total = 0;
i = 1;
preco = 1;
printf("LOJAS TABAJARA \n");
printf("Insira o valor de seus produtos. \nDigite 0 para finalizar a insercao.\n \n");
while (preco > 0)
{
    printf ("Insira o Preco do Produto: \n", i);
    scanf("%f", &preco);
    i = i+1;
    total = total + 1;
}
    printf("Total a pagar: R$ %4.2f \n", total);
    printf("Insira o valor pago: R$ %4.2f \n");
    scanf("%f", &dinheiro);
    troco = dinheiro - total;
    printf("Troco: R$ %4.2f", troco);

system ("PAUSE");
system ("CLS");
}

A variável TOTAL deve receber valores aleatoriamente e para indicar o fim das inserções, deve ser digitado 0.

O problema é o seguinte: Ao ser digitado 0, o programa está pegando os valores e subtraindo, ao invés de exibir o total a pagar e pedir o valor pago para calcular o troco.

Desde já, grato.

total não deveria receber o preco de cada produto?

Olá,

Corrigi esta parte. Agora está assim:

printf ("Insira o Preco do Produto: \n");
    scanf("%f", &preco);
    total = preco + 1;

Mas o erro persiste.

Inseri dois preços (30 e 30). Ao inserir 0 ele gera a saída:

Total a pagar: R$ 1,00
Valor pago: R$ 1,00

Veja que você inicializa

preco = 1;

Penso que você deve fazer algo como

Algoritmo
	declare preco, troco, dinheiro, total real
	preco <- 0
	total <- 0
	
	escreval("Insira o valor dos produtos. Insira 0 para finalizar a inserção")
	enquanto preco <> 0 faca
		escreval("Preço do produto")
		leia(preco)
		total = total + preco
	fimenquanto
	escreval("Total a pagar: ", total)
	escreval("Digite o valor pago")
	leia(dinheiro)
	troco <- dinheiro - total
	escreval("Troco: ", troco)
fimAlgoritmo

drsmachado,

Obrigado pela atenção.

Realizei as modificações. Já temos algum progresso.

O problema agora é que o programa não está mais pausando, aguardando que o usuário insira o valor dos produtos, gerando valores “R$ 0,00”. Gera o valor total e pedindo o valor pago e gerando o troco, caso inserido.

Código:

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

int main()
{
float preco, troco, dinheiro, total;
total = 0;
preco = 0;
printf("LOJAS TABAJARA \n");
printf("Insira o valor de seus produtos. \nDigite 0 para finalizar a insercao.\n \n");
while (preco != 0)
{
    printf ("Insira o Preco do Produto: \n");
    scanf("%f", &preco);
    total = total + preco;
}
    printf("Total a pagar: R$ %4.2f \n", total);
    printf("Insira o valor pago: \n");
    scanf("%f", &dinheiro);
    troco = dinheiro - total;
    printf("Troco: R$ %4.2f", troco);

system ("PAUSE");
system ("CLS");
}

Veja que você instanciou preço como 0 e depois você tem um while preco != 0 (pois eu fiz assim no algoritmo). Ou seja, uma coisa mata a outra. Instancie ele com valor negativo

preco = (-1);

Isso deve permitir que você consiga entrar no loop. A parte de aguardar é feita pelo scanf.

Funcionou! Excelente!

Obrigado pela ajuda!