Problem mit time.h
-
hallo,
bin anfänger.
ich will die aktuelle sekunde ausgeben.#include <stdio.h> #include <time.h> int main() { struct tm abc; printf("Aktuelle Sekunde: %d\n",abc.tm_sec); return 0; }
das ganze sollte jetzt einen wert zwischen 0 und 59 ausgeben, tut es aber nicht.
was ist da falsch?
-
du solltest deine tm struktur irgendwie mit sinnvollen werten füllen. jetzt steht da nämlich nur irgendwas drin. schau dir das einfach in einer c referenz deiner wahl an.
-
Hallo,
du musst vor der Ausgabe eine der Funktionen aus time.h aufrufen,
die die Strukture tm zurueckgibt, z.B. localtime() oder gmtime().Gruesse
-
ok, aber wie mache ich das?
ich hab das jetzt mal ein bisschen abgeändert:
#include <stdio.h> #include <time.h> int main() { time_t t=time(NULL); // ich weiß nicht genau, ob das so stimmt... localtime(&t); // ??? struct tm abc; printf("Aktuelle Sekunde: %d\n",abc.tm_sec); return 0; }
leider keine änderung.
-
Als C Referenz kannst du erstmal hier schauen: http://www.cplusplus.com/reference/clibrary/ctime/
Da schau dir mal localtime an.localtime gibt einen Zeiger auf eine struct tm zurück.
int main() { time_t t; struct tm *abc; // mit * weil es ein Zeiger sein soll. t = time(NULL); abc = localtime(&t); printf("Aktuelle Sekunde: %d\n",abc->tm_sec); // mit ->, weil abc ein struct-Zeiger ist. return 0; }
-
danke für eure hilfe!
-
Bei der Sache musst du aber aufpassen, da localtime einen Zeiger auf eine
static struct tm
zurück gibt.int main() { time_t t; struct tm *abc, *def; // mit * weil es ein Zeiger sein soll. t = 0; // 01.01.1970 00:00:00 UTC Beginn of UNIXtime abc = localtime(&t); printf("Aktuelle Sekunde: %d\n", abc->tm_sec); // mit ->, weil abc ein struct-Zeiger ist. t = 30; // 01.01.1970 00:00:30 UTC def = localtime(&t); printf("Aktuelle Sekunde: %d\n", abc->tm_sec); // abc und def zeigen auf die selbe struct. printf("Aktuelle Sekunde: %d\n", def->tm_sec); // abc und def zeigen auf die selbe struct. return 0; }
-
localtime und verwandte Funktionen brauchen gemäß Standard nicht reentrant implementiert zu sein, d.h. andere zeitparallele Laufzeitumgebungen können hier unerwünscht beeinflussen, du solltest dir hierfür die Werte und nicht den Zeiger merken, also in etwa
time_t t, zeit; t = time(0); zeit = *localtime(&t); /* du befüllst deine eigene Struktur mit den hier aktuell rückgelieferten Daten/Strukturelementen */