Abfrage von Datum und Uhrzeit
-
Hallo Forumianer,
Ich hänge nun seit fast 2 Wochen an dem Code und komme einfach nicht weiter
#include <stdio.h> #include <stdlib.h> #include <time.h> #define MAXJAHR 2012 #define MINJAHR 0 #define MAXDAY 31 #define MINDAY 1 #define MAXMONTH 12 #define MINMONTH 1 unsigned long diff() { time_t now; time (&now); printf("\n*******************************************"); printf("\nS 1970 : %ld\n", now); //RICHTIG!!! now = now / 86400; // umrechnen in Tage printf("t 1970 : %ld\n", now); //RICHTIG!!! now = now + 709200; // 1970 Jahre dazufügen in Tagen printf("t total: %ld\n", now); //RICHTIG!!! return now; } long convertToDays(long dTag,long dMonat,long dJahr) { // Umrechnen der Eingabe in Tage long zahl = dTag; zahl = zahl+ dMonat * 30; zahl = zahl + dJahr * 360; return zahl; } int main(int argc, char *argv[]) { // Variabeln long datum, oTag, oWoche, oMonat, oJahr, age, between; int dTag, dMonat, dJahr; char name[20] = "null"; time_t jetztSec; time_t gebDatumSec; struct tm* jetzt; struct tm* gebDatum; // Frage nach Name printf("Bitte geben sie Ihren Namen ein: "); scanf("%s", name); printf("Hallo "); printf("%s\n", name); // Frage nach Geburtsdatum printf("Wann bist du geboren ?\n\n"); // Abfrage für Tag printf("Tag: "); scanf("%i", &dTag); // Validierung while (dTag<MINDAY || dTag>MAXDAY) { printf("Bitte geben sie eine Zahl zwischen 1 und 31 ein!\n"); scanf("%d", &dTag); } // Abfrage für Monat printf("\nMonat: "); scanf("%i", &dMonat); // Validierung while (dMonat<MINMONTH || dMonat>MAXMONTH) { printf("Bitte geben sie eine Zahl zwischen 1 und 12 ein!\n"); scanf("%i", &dMonat); } // Abfrage nach Jahr printf("\nJahr: "); scanf("%i", &dJahr); // Validierung while (dJahr<MINJAHR || dJahr>MAXJAHR) { printf("Bitte geben sie eine Zahl zwischen 0 und 2012 ein!\n"); scanf("%d", &dJahr); } time ( &jetztSec ); // Geburtsdatum als Struct TM gebDatum = localtime ( &jetztSec ); gebDatum->tm_year = dJahr - 1900; gebDatum->tm_mon = dMonat - 1; gebDatum->tm_mday = dTag; gebDatumSec = mktime(gebDatum); // Jetzt als Struct TM jetzt = localtime ( &jetztSec ); oJahr = jetzt->tm_year - gebDatum->tm_year; oMonat = jetzt->tm_mon - gebDatum->tm_mon; oTag = jetzt->tm_mday - gebDatum->tm_mday; printf("Test: %d", jetzt->tm_year); // Ausgabe des Geburtsdatums printf("\n\nDein Geburtsdatum: %02d.%02d.%04d\n", dTag, dMonat, dJahr); printf("TEST: %d" ,gebDatum->tm_year); // Aufrufen der Funktionen // datum = convertToDays(dTag, dMonat, dJahr); //Tage bis eingegebenes Datum // age = diff(datum); //Tage bis Heute // Überprüfen printf("\nTage bis INPUT: %ld", datum); printf("\nTage bis heute: %ld", age); between = age - datum; // Berechnen der Differenz printf("\nDifferenz : %ld", between); printf("\n*******************************************\n"); // Umwandeln printf("Dein Alter in:"); printf("\n-Tagen: %ld", between); printf("\n-Monaten: %ld", between / 30); printf("\n-Jahren: %ld\n", between / 360); // Ausgabe /* printf("Dein Alter in:\n -Tagen %d \n", &oTag ); printf("-Wochen %d", &oWoche); printf("-Monaten %d", &oMonat); printf("-Jahren %d", &oJahr); */ system("PAUSE"); return 0; }
Ich hoffe, das meir einer sagen kann wie ich die Ausgabe per Strukt_tm machen kann und so diff und ConvertToDays weglassen kann
Liebe grüsse
CGFH
-
localtime gibt eine zeiger auf eine static variable zurück (reserviert keinen speicher mit malloc) d.h.
beim zweiten aufruf wird der gleich zeiger zurückgegeben wie beim ersten
also wird beim zweiten Aufruf *gebDatum verändert.wenn ich es richtig sehe kannst du gebDatum einfach als struct tm definieren und entsprechende änderungen machen, dann sollte es so funktionieren wie du möchtest
-
So bekomme ich eine Fehlermeldung ;/
X:\Users\#####\Desktop\Altersrechner\V.0.2\main.c|96|Fehler: unverträgliche Typen bei Zuweisung an Typ »struct tm« von Typ »struct tm *«|
Oder kann ich das mit strftime ausgeben ?
-
Warum machst du überhaupt
gebDatum = localtime ( &jetztSec );
du nutzt das ergebnis sowiso nicht
darauf beruht mein vorschlagdu solltest dich mit Zeigern und Speicher auseinandersetzen
edit: und die manpages lesen da steht alles drin
-
Ich würde das ganze am Schluss gerne in Tagen, Monaten und Jahren ausgeben, sowie alles zusammen.
Langsam frustet es, ich sitze jetzt seit 14 Tagen 8h am Tag drann ohne nennenswerte Erfolge ;P
-
wo ist das problem
// http://www.cplusplus.com/reference/ctime/tm/ #include <stdio.h> #include <time.h> int main(void) { struct tm datum = {0}; int tag = 21, monat = 11, jahr = 1990; // geburtstag, simulierte eingabe char* wochentag[] = { "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"}; datum.tm_year = jahr - 1900; // tm_year years since 1900 datum.tm_mon = monat - 1; // tm_mon months since January 0-11 datum.tm_mday = tag; // tm_mday day of the month 1-31 mktime ( &datum ); printf ("Du wurdest an einem %s geboren\n", wochentag[datum.tm_wday]); return 0; }