Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Obliczanie różnicy czasu

Ostatnio zmodyfikowano 2015-01-03 01:53
Autor Wiadomość
fornakter
Temat założony przez niniejszego użytkownika
Obliczanie różnicy czasu
» 2015-01-01 20:29:11
Witam.
Chciałem napisać program, który oblicza różnicę czasu między miastami.
Pomijam problem z MSVS 2013 i poleceniem localtime z którym nie mogłem sobie poradzić, po prostu odpaliłem DevC++ i wpisałem
C/C++
#include <ctime>
#include <cstdlib>
#include <iostream>

using namespace std;

void wait( int seconds )
{
    clock_t endwait;
    endwait = clock() + seconds * CLOCKS_PER_SEC;
    while( clock() < endwait ) { }
}

int zegar( time_t & t )
{
    t = time( NULL );
    struct tm * czas;
    czas = localtime( & t );
   
    cout << "Godzina " << czas->tm_hour << ":" << czas->tm_min << ":"
    << czas->tm_sec << endl;
   
   
    for(;; )
    {
       
        wait( 1 );
       
        system( "cls" );
        t = time( NULL );
        czas = localtime( & t );
        cout << "Godzina " << czas->tm_hour << ":" << czas->tm_min << ":"
        << czas->tm_sec << endl;
       
    }
    return t;
}

int main()
{
    time_t t, koniec;
    struct tm * miasto;
    double roznica;
   
    zegar( t );
    miasto = localtime( t );
    roznica = difftime( miasto, koniec );
    cout << roznica;
    return 0;
}
Do tej pory mam zegarek.
W sekcji main, chce zrobić te porównanie. Ten kod oczywiscie nie działa i wykakuje błąd
C:\...\DevC++\Czas\main.cpp [Error] invalid conversion from 'time_t {aka long long int}' to 'const time_t* {aka const long long int*}' [-fpermissive]

P-123816
SocrateZ
» 2015-01-03 01:53:37
Błąd masz ponieważ do localtime przekazujesz zmienną a nie wskaźnik do zmiennej time_t.
miasto = localtime( t );

Jak już mówiłem, musisz przekazać wskaźnik.

Dalej. Funkcja localtime zwraca strukturę tm. Jak sama nazwa wskazuje zmienna jest strukturą.
W związku z powyższym funkcja:
roznica = difftime( miasto, koniec );
 nie ma prawa bytu.
difftime przyjmuje dwie zmienne typu time_t, rzutowanie nic tu nie da.
Istnieje jednak funkcja
mktime
. Funkcja ta przyjmuje strukturę tm i zwraca time_t.
Musisz więc utworzyć nową zmienną i przypisać do niej wynik z funkcji mktime, która przyjmie strukturę tm, w tym wypadku zmienną miasto.

Mniej więcej tak to powinno wyglądać:
C/C++
time_t t, koniec = 0, city = 0;
struct tm * miasto = NULL;
double roznica = 0;
zegar( t );

miasto = localtime( & t );
city = mktime( miasto );

roznica = difftime( city, koniec );
cout << roznica;
P-123900
« 1 »
  Strona 1 z 1