Jump to content

[C] Ajuda - Erro ao devolver valor


Recommended Posts

Posted

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

Posted

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"

Posted

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

Posted

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"

Posted

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

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.