C :: Aufgabe #39
1 Lösung
Zeit zwischen zweier Tage
Anfänger - C
von Dome
- 10.03.2013 um 23:50 Uhr
Erstellen Sie ein Programm, mit dem man die Zeitdifferenz zwischen zwei Tagen bestimmen kann. Hierzu muss man beide Tage eingeben und das Programm gibt die Zeitdifferenz aus.
Je nach Schwierigkeitsgrad:
Eingabe der Daten per Konsole oder GUI, eine Art Dropdown-Menü oder ähnliches
Ausgabe der Differenz in mehreren "Zeitformen", Tage, Monate, Jahre, Minuten, Stunden
Eingabe von Uhrzeiten, die jeweils in die Berechnung einfließen
Je nach Schwierigkeitsgrad:
Eingabe der Daten per Konsole oder GUI, eine Art Dropdown-Menü oder ähnliches
Ausgabe der Differenz in mehreren "Zeitformen", Tage, Monate, Jahre, Minuten, Stunden
Eingabe von Uhrzeiten, die jeweils in die Berechnung einfließen
Lösungen:
/****************************************
* timediff.c Zeit zwischen zweier Tage
* devnull 04-03-2014
****************************************/
#define _XOPEN_SOURCE
#include <stdio.h>
#include <string.h>
#include <time.h>
#define TMBUF_LEN 20
#define SECONDS_PER_DAY 86400
#define DATE_FORMAT "%d.%m.%Y"
int input_date(char *sdate, char *stime, struct tm *tmi)
{
char inbuf[TMBUF_LEN + 1];
char *pe;
printf("%-10s: ", sdate);
scanf("%s", inbuf);
inbuf[TMBUF_LEN] = '\0';
strcat(inbuf, stime);
pe = strptime(inbuf, DATE_FORMAT "%T", tmi);
if (pe == NULL || *pe != 0) {
fprintf(stderr, "%11s %10s\n", "Ungueltiges", sdate);
return 1;
}
tmi->tm_isdst = 0;
return 0;
}
int main(void)
{
struct tm tms, tme;
int secs;
float days;
if ((input_date("Startdatum", "12:00:00", &tms) != 0) ||
(input_date("Enddatum", "12:00:00", &tme) != 0))
return 1; // Fehler
secs = mktime(&tme) - mktime(&tms);
days = (float)secs / SECONDS_PER_DAY;
printf("Differenz : %d Sekunden\n", secs);
printf("entspricht: %.1f Tagen\n", days);
return 0;
}
