Jump to content
Fórum Script Brasil
  • 0

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


luizking93

Question

/*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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...