Ir para conteúdo
Fórum Script Brasil
  • 0

[Duvida] Compilação com erro em 2 estruturas diferentes


luizking93

Pergunta

/*Questão 1: construir um programa em C que leia o código de venda (‘V’ para vendas à vista e ‘P’ para vendas à prazo) e o valor de venda de 20 produtos. Calcular, armazenar e imprimir o total de vendas à vista, o total de vendas à prazo e o total geral de vendas. */

Ambas as formas abaixo apresentam o mesmo erro durante a compilação:

#include <stdio.h>

main() {

int i;

float tv = 0, tp = 0, tg = 0, pv, pp;

char f;

for(i = 1; i <= 3; i++){

printf("\nInsira a forma de pagamento \n\tDigite 'V' para venda a vista \n\tDigite 'P' para venda a prazo \nForma: ");

scanf("%c", &f);

switch (f){

case 'V': printf("\nInsira o valor do produto: R$ ");

scanf("%f", &pv);

tv += pv; break;

case 'P': printf("\nInsira o valor do produto: R$ ");

scanf("%f", &pp);

tp += pp; break;

}

}

tg = tp + tv;

printf("\nTotal de vendas a vista: %0.2f", tv);

printf("\nTotal de vendas a prazo: %0.2f", tp);

printf("\n\nTotal geral da venda: %0.2f\n\n", tg);

system("PAUSE");

}

e esta

#include <stdio.h>

main() {

int i;

float tv = 0, tp = 0, tg = 0, pv, pp;

char f;

for(i = 1; i <= 3; i++){

printf("\nInsira a forma de pagamento \n\tDigite 'V' para venda a vista \n\tDigite 'P' para venda a prazo \nForma: ");

scanf("%c", &f);

if (f == 'V'){

printf("\nInsira o valor do produto: R$ ");

scanf("%f", &pv);

tv += pv;}

else if (f == 'P'){

printf("\nInsira o valor do produto: R$ ");

scanf("%f", &pp);

tp += pp; }

}

}

tg = tp + tv;

printf("\nTotal de vendas a vista: %0.2f", tv);

printf("\nTotal de vendas a prazo: %0.2f", tp);

printf("\n\nTotal geral da venda: %0.2f\n\n", tg);

system("PAUSE");

}

O primeiro loop funciona perfeitamente, porem o 2ª loop é pulado e o terceiro inverte a forma de pagamento o primeiro e pede apenas o valor do produto.

alguém poderia me ajudar ?

Grato.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

esse codigo é o correto:

#include <stdio.h>
int main() {
int i;
float tv = 0, tp = 0, tg = 0, pv, pp;
char f;

for(i = 1; i <= 3; i++){
    do {
printf("\nInsira a forma de pagamento \n\tDigite 'V' para venda a vista \n\tDigite 'P' para venda a prazo \nForma: ");
fflush(stdin);
scanf("%c", &f);

if(islower(f)) f-=32;
if((f!='P')||(f!='V')) puts ("Forma de pagamento invalida.");
    } while ((f!='P')||(f!='V'));
switch (f){
case 'V': printf("\nInsira o valor do produto: R$ ");
scanf("%f", &pv);
tv += pv; break;
case 'P': printf("\nInsira o valor do produto: R$ ");
scanf("%f", &pp);
tp += pp; break;
}
}
tg = tp + tv;

printf("\nTotal de vendas a vista: %0.2f", tv);
printf("\nTotal de vendas a prazo: %0.2f", tp);

printf("\n\nTotal geral da venda: %0.2f\n\n", tg);
system("PAUSE");
return 0;
}

o que fiz:

coloquei um teste dentro do for pra se ter certeza que o usuario digite V ou P.

agora funciona tb com v e p minusculos, porque a funcao islower() me diz se o caractere é minusculo ou maiusculo e subtrai 32 pra converter o caractere pra maiusculo (consute a tabela ascII, na verdade caracteres são numeros lidos como char)

rez a lenda que colocando scanf("%*c", &character); ele le o numero digitado, mas nunca consegui funcionar, então eu sempre coloco o fflush(stdin); que llimpra o buffer do teclado.

saltava o segundo loop porque já estava armazenado o Carriage Return no buffer do teclado (que é um caractere SIM, de controle, mas é um caractere) e o programa já incluia na variavel

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

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

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...