Mkman 14 Denunciar mensagem Publicado 1 de Março de 2010 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 3 Denunciar mensagem Publicado 1 de Março de 2010 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
Mkman 14 Denunciar mensagem Publicado 1 de Março de 2010 não e exemplo. e sim o output que o programa da depois de execução Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
Baderous 33 Denunciar mensagem Publicado 1 de Março de 2010 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