Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Mkman

Exercicio de C-Ajuda

Recommended Posts

Mkman

Tenho um exercicio de C mais esta a dar me erro, o programa e para converter de horas para minutos e segundos

#include<stdio.h>

long int segundos(int n_horas, char ch)
{
switch(ch)
{
	 case 'h':
	 case 'H': return n_horas; break;
	 case 's':
	 case 'S': return n_horas*3600; break;
	 case 'm':
	 case 'M': return n_horas*60; break;
 }
}



main()
{
long int n_horas;
char ch;
printf("Intruduza o numero de horas:"); scanf("%ld",&n_horas);
printf("###########################\n");
printf("\t H ou h para horas\n");
printf("\t S ou S para segundos \n");
printf("\t M ou m para minutos\n");
printf("Intruduza o valor desejado:"); scanf("%c",&ch);
printf("%ld\n",segundos(n_horas,ch));
} 

Se preferirem no pastie.org

http://www.pastie.org/847921

e esta a dar me o output:

Intruduza o numero de horas:7

###########################

H ou h para horas

S ou S para segundos

M ou m para horas

Intruduza o valor desejado:-62

Obrigado

Share this post


Link to post
Share on other sites
Localhost

Em primeiro lugar o primeiro parametro da função que retorna as horas convertidas está mal, devia de ser um long int e não um int.

Depois não percebi muito bem o que é aquele -62 no teu input (não no código mas no exemplo que deste no fim)


here since 2009

Share this post


Link to post
Share on other sites
Baderous

Tens aí alguns erros que precisas de corrigir:

1) Na função segundos, no switch, estás a fazer returns antes dos breaks, daí que os breaks nunca são executados. Isto não me parece muito grave, mas a melhor opção seria criares uma variável do tipo long int, que corresponde ao teu tipo de retorno dessa função, e a essa variável, em cada caso do switch, atribuías o valor que estás a devolver no return, mantendo os breaks. Por fim, depois do switch, fazias return desse valor. Convém também acrescentares uma cláusula default no switch para prever o caso em que o utilizador introduz um caracter que não um dos que especificaste.

2) O que o Localhost já referiu, o teu parâmetro da função segundos é um int, e quando a invocas, estás a passar um long int.

3) A main deve retornar um int, que deverá ser o 0, e deve ter como parâmetro void nesse caso, porque não interages com a linha de comandos.

4) Precisas de limpar o buffer de entrada após a leitura das horas, porque senão fica lá guardado o '\n' que resulta de pressionares o <ENTER> para introduzir a hora e esse valor é aproveitado pelo scanf seguinte, pelo que é a isso que se deve o comportamento estranho do programa. Podes usar a instrução:

scanf("%*c");

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
Sign in to follow this  

×

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.