Jump to content

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


Guest Markito

Recommended Posts

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...

👍

Edited by Opaidacriança
Link to comment
Share on other sites

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

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

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.

Link to comment
Share on other sites

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

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!

Link to comment
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.