Sziasztok!
Akadt itt egy kis C-beli problemam, amire napok ota nem talalok megoldast...
Szoval azt szeretnem, hogy stdinrol olvasok "HH:MM HH:MM" formatumu inputot es ki kellene iratnom a 2 idopont kozott eltelt masodperceket. Nezegettem, googleoztam csomot, de egyszeruen nem mukodik, amit osszehoztam...
A kod, ami (most meg teszteles miatt kezzel allitva ugyan) kiszamolna a 2 idopont kozt eltelt idot:
#include<time.h>
#include<stdio.h>
int main(int argc, char* argv[])
{
struct tm *timestart;
struct tm *timefinish;
time_t rawtimestart;
time(&rawtimestart);
timestart = localtime(&rawtimestart);
timestart->tm_hour=10;
timestart->tm_min=20;
timestart->tm_sec=0;
printf("%s", asctime(timestart));
time_t rawtimefinish;
time(&rawtimefinish);
timefinish = localtime(&rawtimefinish);
timefinish->tm_hour=20;
timefinish->tm_min=0;
timefinish->tm_sec=0;
printf("%s", asctime(timefinish));
double secselapsed = difftime(mktime(timestart), mktime(timefinish));
printf("%d", secselapsed);
return 0;
}
az elso ket kiiratas tokeletes, azt kapom, amit szeretnek (mai nap, a beallitott ora, perc, mp), azonban a difftime-mal akarmit csinalok 0-t ad.
Tudnatok segiteni egy kicsit, hogy hogyan probalkozzak?
- 1070 megtekintés
Hozzászólások
double secselapsed = ...;
printf("%d", secselapsed);
Talán %d helyett %f :)
- A hozzászóláshoz be kell jelentkezni
Tovabbra is 0.000000 :), nem vagom mi a baja...
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
A localtime-vel van a baj. Részlet a manualból:
"The return value points to a statically allocated struct which might be overwritten by subsequent calls to any of the date and time functions."
Némi módosítás után már működik:
#include<time.h>
#include<stdio.h>
int main(int argc, char* argv[])
{
struct tm *timestart;
struct tm *timefinish;
time_t rawtimestart;
time(&rawtimestart);
timestart = localtime(&rawtimestart);
timestart->tm_hour=10;
timestart->tm_min=20;
timestart->tm_sec=0;
time_t _timestart = mktime(timestart);
printf("%s", asctime(timestart));
time_t rawtimefinish;
time(&rawtimefinish);
timefinish = localtime(&rawtimefinish);
timefinish->tm_hour=20;
timefinish->tm_min=0;
timefinish->tm_sec=0;
time_t _timefinish = mktime(timefinish);
printf("%s", asctime(timefinish));
double secselapsed = difftime(_timestart, _timefinish);
printf("%f", secselapsed);
return 0;
}
- A hozzászóláshoz be kell jelentkezni
Es igen! Koszonom szepen!
En is probaltam igy, de ugy latszik akkor megint masvalamit mashogy tettem es azert nem volt jo :F
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni