kwnds Posted December 15, 2006 at 09:56 AM Report #70640 Posted December 15, 2006 at 09:56 AM Estou a programar um software em C em que o utilizador indica as horas em que deseja encerrar o pc e o software faz. Neste codigo que eu vou postar, ainda estou so a pedir ao utilizador a que horas deseja encerrar o pc e depois ele devolve-lhe os segundos que faltam. Ele ainda tem um erro quando a hora inserida é menor que a hora actual e o mesmo acontece com os minutos. Mas o meu problema é outro: mesmo que eu insira uma hora maior que a actual e minutos tambem, o programa não me devolve o valor correcto. Não tenho a certeza, mas penso que o problema esteja relacionado com as variaveis "h", "m" e "s". Se alguem me pudesse ajudar a corrigir este erro agradecia, relembro que para o software não dar outro erro temos de inserir uma hora maior que a actual e o mesmo acontece com os minutos (assim que tiver tempo dou a volta a isso). #include <stdio.h> #include <dos.h> #include <time.h> #include <conio.h> #include <string.h> #include <process.h> int h=0, m=0; long s=0; int main (void) { int tempo(); int converter(); printf("Programador para desligar PC:\nHoras: "); scanf("%d",&h); printf("Minutos: "); scanf("%d",&m); clrscr(); tempo(); return 0; } int tempo() { int converter(); struct time t; gettime(&t); h=h-t.ti_hour; m=m-t.ti_min; converter(); return 0; } int converter() { s=h*3600+m*60; printf("Faltam: %2d segundos",s); getch(); return 0; } Para compilar estou a usar o TurboC e a função que usei para obter as horas e minutos foi a "gettime".
Hipnoted Posted December 15, 2006 at 10:42 AM Report #70648 Posted December 15, 2006 at 10:42 AM A função converter devolve sempre zero. Depois tens declaração de funções dentro do main e tem de estar antes. Mais uma coisa, não precisavas de variàveis globais, podias chamar a função e passar-lhe os argumentros. Mais uma coisa, na função converter a variável "s" é do tipo long mas estás a fazer as contas com inteiros por isso não são compatíveis. A "s" tem de ser do tipo inteiro ou então as outras variáveis têm de ser do tipo long. Aquilo de passar por parâmetros tinha de ficar mais ou menos assim: ... int h, m; struct time t; gettime(&t); h=h-t.ti_hour; m=m-t.ti_min; converter(h, m); return 0; } int converter(h, m) { int s; s=h*3600+m*60; printf("Faltam: %2d segundos",s); getch(); return s; } "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
kwnds Posted December 15, 2006 at 11:59 AM Author Report #70671 Posted December 15, 2006 at 11:59 AM Já consegui resolver o problema usando a declaração de funções fora da main e mudando todas as variaveis para long (pois o total de segundos é um numero bastante grande). Apenas não consegui entender uma coisa: nesta ultima explicação, o "converter()" passou para "converter h, m)" e o mudou-se o "return 0" para "return s". Não consegui perceber essas alterações. Vou agora começar a criar condições caso a hora e minutos inseridos sejam inferiores aos actuais. Abraços e obrigado
Hipnoted Posted December 15, 2006 at 12:02 PM Report #70674 Posted December 15, 2006 at 12:02 PM Apenas não consegui entender uma coisa: nesta ultima explicação, o "converter()" passou para "converter h, m)" e o mudou-se o "return 0" para "return s". Não consegui perceber essas alterações. Tu tinhas declarado as variáveis globalmente.Por isso podias aceder a elas em qualquer função. Está certo. O que eu disse é que também podias fazer decvlarando as variáveis dentyro da função e passando-lhe os parâmetros quando chamas a função converter. se quizeres exemplos de como se faz parav chamar funções e passar-lhe parâmetros vê aqui na secção de C que tem muitos exemplos disso,. 😉 "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
kwnds Posted December 15, 2006 at 12:19 PM Author Report #70676 Posted December 15, 2006 at 12:19 PM Já programei demodo a quando as horas ou minutos actuais forem maiores que os inseridos, o software faça á mesma a contagem mas continuo com um erro: #include <stdio.h> #include <dos.h> #include <time.h> #include <conio.h> #include <string.h> #include <process.h> long h=0, m=0, s=0; int tempo(); int converter(); int main (void) { printf("Programador para desligar PC:\nHoras: "); scanf("%d",&h); printf("Minutos: "); scanf("%d",&m); clrscr(); tempo(); return 0; } int tempo() { struct time t; gettime(&t); int converter(); h=h-t.ti_hour; m=m-t.ti_min; converter(); return 0; } int converter() { struct time t; gettime(&t); if(h<t.ti_hour) { h=24-t.ti_hour+h; } if(h<t.ti_min) { m=60-t.ti_hour+h; } } s=h*3600+m*60; printf("Faltam: %2d segundos",s); getch(); return 0; } Exemplo para o codigo: "h=24-t.ti_hour+h" Hora actual: 12 Hora inserida: 10 esperar: 22 Resultado: 24-12+10 O "t.ti.hour" dá-me a hora actual e o "h" armazena a hora inserida, apenas não consigo ver onde está o erro. Será que serão segundos a mais a serem armazenados na variavel long? Se for esse o caso, que variavel devo usar? "Hipnoted" obrigado pela explicação, agora já percebi o porque das alterações. Abraços
Warrior Posted December 17, 2006 at 10:33 AM Report #70911 Posted December 17, 2006 at 10:33 AM Em C, tanto long como int ocupam 32bits.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now