Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gRoOvE

[Resolvido] passando por cima de char no scanf

Recommended Posts

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

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

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

ñ é 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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.