dzień tygodnia sprawdzenie poprawnosci daty

0

Napisz program, który wczytuje ze standardowego wejścia datę w formacie DD-MM-RRRR a następnie sprawdza czy jest ona poprawna. Dla poprawnej daty program powinien wydrukować na standardowym wyjściu odpowiadający jej dzień tygodnia (PN, WT, SR, CZ, PT, SB, ND) zaś dla daty niepoprawnej slowo ERROR.

Przykładowe wejście:
07-04-2018
08-04-2018
09-04-2018
10-04-2018
11-04-2018
12-04-2018
13-04-2018
40-04-2018
12-15-2018
29-02-2018
Przykładowe wyjście:
SB
ND
PN
WT
SR
CZ
PT
ERROR
ERROR
ERROR

#include <stdio.h>

char *tydzien[7]= {"SB","ND","PN","WT","SR","CZ","PT"};
int dni_mies[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
int dni_mies_rok[12];

int sprawdz_date(int d, int m, int r)
{
    return (d>0 && d<=dni_mies[m-1]) && (m>=1 && m<=12);
}

int rok_przestepny(int r)
{
    return (r%400==0 || (r%4==0 && r%100!=0));
}

int mk_dni_mies_rok()
{
    int n;
    for(n=1; n<12; n++)
    {
        dni_mies_rok[n]=dni_mies_rok[n-1]+dni_mies[n-1];
    }
    return n;
}

int ile_przestepnych(int r)
{
    int n,iprzestepnych=0;
    for(n=1; n<r; n++)
    {
        if(rok_przestepny(n))
            iprzestepnych++;
    }
    return iprzestepnych;
}

int main(int argc, char *argv[])
{
    int d,m,r;
    for(;;)
    {
        printf("podaj date(dd-mm-rrrr): ");
        scanf("%d-%d-%d",&d,&m,&r);
        if(rok_przestepny(r))
            dni_mies[1]=29;
        else
            dni_mies[1]=28;
    if(!sprawdz_date(d,m,r)){
            printf("ERROR");
    }
       mk_dni_mies_rok();
printf("%s\n",tydzien[(d+dni_mies_rok[m-1]+r+ile_przestepnych(r))%7]);
    }


}

Proszę o pomoc, gdy podaje zła date wyswietla mi nieporawny dzien zamiast slowa error

0

Po dopisaniu else wyświetla się tylko error:

if (!sprawdz_date(d, m, r))
    printf("ERROR\n");
else {
    mk_dni_mies_rok();
    printf("%s\n", tydzien[(d + dni_mies_rok[m - 1] + r + ile_przestepnych(r)) % 7]);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1