Jump to content
Guest Markito

programa com switch não me está a dar!

Recommended Posts

Guest Markito

Muito boa noite a todos.

Voltei de novo a pegar no livro do sr. Damas "Linguagem C", para estudar de novo e avançar em questão de programação em C.

reparem no seguite código:

#include <stdio.h>
main()
{
float salario, imposto=0.0;
char sexo;
printf("Introduza o montante do seu salario:\n");
scanf("%f",&salario);
printf("Qual o seu sexo?\n");
scanf("%c",&sexo);
switch (sexo)
{
case 'f':
case 'F': imposto=0.15;
	 break;
case 'm':
case 'M': imposto=0.20;
	 break;
}
printf("O imposto sobre o seu salário é %.3f\n",salario*imposto);
}

Este programa não me está a dar o resultado que esperava. E o código está certo!

Pede-se-me o montante eu introduzo 1000 por exemplo e logo de seguida pergunta-me o sexo mas já me dá a resposta finam "O imposto sobre o seu salário é 0.000"!

não consigo perceber porque é que isso funciona, mas uma vez numa dúvida anterior o Hipo disse-me que era preciso limpar o buffer... Será disso? porque é que isto acontece?

Obrigado desde já pela atenção e fico a aguardar por uma ajuda...

:thumbsup:

Edited by Opaidacriança

Share this post


Link to post
Share on other sites
thinkabout

tens que fazer fflush(stdin);

Depois

printf("Introduza o montante do seu salario:\n");
scanf("%f",&salario);

Porque quando carregas em enter o mesmo fica em buffer e tens que o limpar.

http://www.cplusplus.com/reference/cstdio/fflush/

Tambem o podias enganar assim

printf("Introduza o montante do seu salario:\n");
scanf("%f",&salario);
printf("Qual o seu sexo?\n");
scanf("% c",&sexo);

O livro não está como neste último exemplo ? acho que tive o mesmo problema nesse exercício.

Edited

Ora cá está o tópico

https://www.portugal-a-programar.pt/topic/57229-fflush-stdin-e-c-buffer/page__hl__fflush%28stdin%29

Edited by thinkabout

Share this post


Link to post
Share on other sites
poliveira1978

tb podes fazer assim:

#include <stdio.h>
main()
{
float salario, imposto=0.0;
char lixo[5];
char sexo;
printf("Introduza o montante do seu salario:\n");
fgets(lixo,5,stdin);
sscanf(lixo,"%f",&salario);
printf("Qual o seu sexo?\n");
scanf("%c",&sexo);
switch (sexo)
{
case 'f':
case 'F': imposto=0.15;
                break;
case 'm':
case 'M': imposto=0.20;
                break;
}
printf("O imposto sobre o seu salário é %.3f\n",salario*imposto);
}

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
Rui Carlos

tens que fazer fflush(stdin);

Depois

printf("Introduza o montante do seu salario:\n");
scanf("%f",&salario);

Porque quando carregas em enter o mesmo fica em buffer e tens que o limpar.

http://www.cplusplus.com/reference/cstdio/fflush/

Tambem o podias enganar assim

printf("Introduza o montante do seu salario:\n");
scanf("%f",&salario);
printf("Qual o seu sexo?\n");
scanf("% c",&sexo);

O livro não está como neste último exemplo ? acho que tive o mesmo problema nesse exercício.

Edited

Ora cá está o tópico

https://www.portugal-a-programar.pt/topic/57229-fflush-stdin-e-c-buffer/page__hl__fflush%28stdin%29

No tópico que referiste já te explicaram que o fflush(stdin) não é uma solução fiável.

Quanto à técnica do espaço, penso que este deve aparecer antes do % e não depois.

Share this post


Link to post
Share on other sites
HappyHippyHippo

da tua própria referencia :

In all other cases, the behavior depends on the specific library implementation. In some implementations, flushing a stream open for reading causes its input buffer to be cleared (but this is not portable expected behavior).

continuas a achas que fflush(stdin) é algo que se deva usar ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
thinkabout

da tua própria referencia :

continuas a achas que fflush(stdin) é algo que se deva usar ?

Não mas na altura que respondi ao tópico, nem me lembrei do fgets e não reli o tópico antigo todo.

Edited by thinkabout

Share this post


Link to post
Share on other sites
thoga31

Não mas na altura que respondi ao tópico, nem me lembrei do fgets e não reli o tópico antigo todo.

E é preciso reler? Quando se lê na primeira vez, supostamente aprende-se alguma coisa, sendo neste caso algo simples - "fflush do stdin não" ;)


Knowledge is free!

Share this post


Link to post
Share on other sites
Guest Markito

tens que fazer fflush(stdin);

Depois

printf("Introduza o montante do seu salario:\n");
scanf("%f",&salario);

Porque quando carregas em enter o mesmo fica em buffer e tens que o limpar.

http://www.cplusplus.com/reference/cstdio/fflush/

Tambem o podias enganar assim

printf("Introduza o montante do seu salario:\n");
scanf("%f",&salario);
printf("Qual o seu sexo?\n");
scanf("% c",&sexo);

O livro não está como neste último exemplo ? acho que tive o mesmo problema nesse exercício.

Edited

Ora cá está o tópico

http://www.portugal-a-programar.pt/topic/57229-fflush-stdin-e-c-buffer/page__hl__fflush%28stdin%29

Pois está! saltei umas páginas e perdi essa de compreender o espaço antes ( e não depois!) do %c. Vou reler de novo para compreender o porquê desse espaço.

Aos outros senhores também agradeço fico a conhecer essa do fflush(stdin) mas ainda não vou usar, porque parece que tem os seus quês e eu ainda estou numa fase inicial e por isso não vou meter informação que não compreenda.

de qualquer maneira um muito obrigado a todos e têm sido de uma grande ajuda.

Obrigado Hipo!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.