Dokładne polecenie do wykonania i poniżej mój kod:
Napisz program, który pobierze od użytkownika datę w formacie dd-mm-yyyy, a następnie wyświetli komunikat:
- Incorrect input - w przypadku podania błędnych danych, program powinien zakończyć działanie z kodem błędu 1,
- Incorrect - w przypadku, kiedy podana data nie jest poprawną datą,
- Correct - w przypadku, kiedy podana data jest poprawna.
Przykładowe wejście:
Podaj date (w formacie dd-mm-yyyy): 29-02-2016
Przykładowe wyjście:
Correct
#include <stdio.h>
int main (){
int dzien,mies,rok;
printf("Podaj date: ");
int c=scanf("%2d-%2d-%4d" ,&dzien,&mies,&rok);
if (c!=3) {
printf("Incorrect input");
return 1;
}
else if ((mies == 4 && dzien == 31) || (mies == 6 && dzien == 31) || (mies == 9 && dzien == 31) || (mies == 11 && dzien == 31)) {
printf("incorrect");
return 0;
}
else if (mies == 2 && dzien>28 && rok % 4 != 0 || (rok % 4 != 0 && rok % 400 != 0 && rok % 100 == 0)) {
printf ("incorrect");
return 0;
}
else if (1>dzien || dzien>31 || 1>mies || mies>12 || 999>rok) {
printf("incorrect");
return 0;
}
else {
printf("correct");
return 0;
}
}
Niestety przy dacie np. 29-02-1900 program zwraca "correct", mimo tego że nie jest to rok przestępny i warunek wyłapujący taką datę jest zawarty w kodzie. Jak sformułować ten warunek?