gRoOvE 0 Denunciar post Postado Abril 26, 2008 bom, tenho o seguinte codigo aqui: #include "stdafx.h" void main(void) { //variaveis char resposta = 's'; int codigo, qtd; float soma, total; soma = 0; total = 0; //entrada //processamento while(resposta == 's') { printf("\nDigite o codigo do item: "); scanf("%d",&codigo); printf("Digite a quantidade do item: "); scanf("%d",&qtd); if( (codigo == 100) || (codigo == 103) ) { soma = qtd * 1.20; } if( (codigo == 101) || (codigo == 104) ) { soma = qtd * 1.30; } if(codigo == 102) { soma = qtd * 1.50; } if(codigo == 105) { soma = qtd * 1.00; } total = total + soma; printf("\nValor total do item: R$%.2f",soma); printf("\n\nDeseja continuar? [s] ou [n] "); scanf("%c",&resposta); } //saida printf("\nValor total do pedido: RS%.2f\n",total); }ali onde faço a verificação da condicao do while com o scanf, o programa simplesmente ignora o scanf e sai do laço, tentei trocar por %f ali no scanf soh pra testar, ai ele pede pra digitar uma tecla, achei estranho...tem alguma coisa errada com o while verificar a condição com um char ?? Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 27, 2008 olha nesse trecho adicione um getchar(); total = total + soma; getchar(); printf("\nValor total do item: R$%.2f",soma); Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Abril 27, 2008 quit, pq tenho que usar getchar() ao invez de scanf(), qual a diferença entre os dois e pq o scanf() passa direto ?? Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 28, 2008 ñ é q você tem q usar getchar(); ao invez de scanf(); o getchar tipo tiro algum '\n' q fico preso(q eu entenda neh); pq sem o getchar ele vai pular pra proxima instrução pensando q você jah digitou algo! Compartilhar este post Link para o post Compartilhar em outros sites
Sσwyєяº 0 Denunciar post Postado Abril 28, 2008 cara .. já foi resolvido mesmo ? caso não .. use o do while .. pois garante que o que estiver entre eles será execultado ao menos uma vez...e ele não iguinorará o scanf ... ficaria algo como isso : #include "stdafx.h" void main(void) { //variaveis char resposta = 's'; int codigo, qtd; float soma, total; soma = 0; total = 0; //entrada //processamento do { printf("\nDigite o codigo do item: "); scanf("%d",&codigo); printf("Digite a quantidade do item: "); scanf("%d",&qtd); if( (codigo == 100) || (codigo == 103) ) { soma = qtd * 1.20; } if( (codigo == 101) || (codigo == 104) ) { soma = qtd * 1.30; } if(codigo == 102) { soma = qtd * 1.50; } if(codigo == 105) { soma = qtd * 1.00; } total = total + soma; printf("\nValor total do item: R$%.2f",soma); printf("\n\nDeseja continuar? [s] ou [n] "); scanf("%c",&resposta); } while ((resposta == 's') || (resposta == 'S')) //saida printf("\nValor total do pedido: RS%.2f\n",total); } com o do while ele verifica a condição no final.. caso você queira continuar ele voltará a executar o que estiver entre o bloco do "do", caso não ele simplesmente segue o código e mostra a saida... sem você ter que usar o getchar() já que você não tem segurança suficiênte... uma dica quwe eu dô é: sºo use em seus códigos aquilo que você sabe manipular bem! pq achar os erros se torna muito mais facil. Compartilhar este post Link para o post Compartilhar em outros sites
NoBe 0 Denunciar post Postado Abril 28, 2008 Não tenho uma explicação lógica, mas tente colocar o scanf assim: scanf(" %c",&resposta); Estranho? Mas é isso mesmo, com um espaço entre a 1ª aspa e a porcentagem. O DevCpp as vezes tem essa pala, não sei se é esse o seu compilador, mas posta se deu certo ae pra galera... Abraço! Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 28, 2008 q eu entenda esse " %c" ele tipo ignora os espaços até encontrar um digito valido! Compartilhar este post Link para o post Compartilhar em outros sites
NoBe 0 Denunciar post Postado Abril 28, 2008 Se for isso mesmo eu não sabia, minha professora de LP1 tbm não soube explicar o motivo. Vlw quit! Abraço! Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Abril 28, 2008 uso o microsoft visual C++ 6.0, bom velho vou testar com espaço pra ver...vou verificar tb se tem algum espaço la :D vlws Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Abril 28, 2008 testei o espaço, deu certo...mais uma explicação mais lógica foi usar o fflsuh pra limpar o cache: printf("\n\nDeseja continuar? [s] ou [n]"); fflush(stdin); scanf("%c",&resposta); Compartilhar este post Link para o post Compartilhar em outros sites
Sσwyєяº 0 Denunciar post Postado Abril 29, 2008 eu nunk tive um problema assim..sempre uso o do while... Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Abril 29, 2008 nesse caso um do-while cairia bem msm, mas você usa do-while toda vez q precisa usar laço ?? Compartilhar este post Link para o post Compartilhar em outros sites
Sσwyєяº 0 Denunciar post Postado Abril 30, 2008 NÃO... varia muito... só quando a execução tem que ser feita ao menos uma vez... Compartilhar este post Link para o post Compartilhar em outros sites