C :: Aufgabe #42

1 Lösung Lösung öffentlich

Bei Addition von Tage nur Werktage beachten

Anfänger - C von Gustl - 22.07.2013 um 11:04 Uhr
Schreibe ein Programm welches die Anzahl der addierenden Tage abfrägt und dann das Datum ausgibt.
Bei der Addition der Tage sollen aber nur die Werktage (Geschäftstage): Montag, Dienstag, Mittwoch, Donnerstag und Freitag beachtet werden.

Beispiel: Heute ist der 22.07. (Montag), wenn ich nun 7 Tage eingebe soll der 31.07. (Mittwoch) ausgegeben werden.

Lösungen:

vote_ok
von devnull (8870 Punkte) - 05.03.2014 um 11:45 Uhr
Quellcode ausblenden C-Code
/****************************************
 * werktage.c   Werktage addieren
 * devnull      05-03-2014
 ****************************************/
#define _XOPEN_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>

#define TMBUF_LEN 30
#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)
{
	char sdays[10];
	char tmbuf[TMBUF_LEN];
	time_t t;
	struct tm tms;
	struct tm *tml;
	int cdays, ndays;

    if (input_date("Startdatum ", "12:00:00", &tms) != 0)
		return 1;
    t = mktime(&tms);
	printf("Anzahl Tage: ");
	scanf("%s", sdays);
	cdays = atoi(sdays);
	ndays = 0;
	while (ndays < cdays) {
		t += SECONDS_PER_DAY;
		tml = localtime(&t);
		/* 0 = Sonntag, 6 = Samstag */
		if (tml->tm_wday > 0 && tml->tm_wday < 6)  
			ndays++;
	}
	strftime(tmbuf, TMBUF_LEN, DATE_FORMAT, tml);
	printf("Enddatum   : %s\n", tmbuf);
    return 0;
}