Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Mkman

Exercicio de C-Ajuda

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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");

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.