• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyświetlanie daty - problem z latami przestępnymi

0 głosów
593 wizyt
pytanie zadane 19 października 2018 w C i C++ przez Świeżak01 Nowicjusz (180 p.)

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? 

1 odpowiedź

0 głosów
odpowiedź 19 października 2018 przez mokrowski VIP (146,440 p.)

Warunek sprawdzenia czy rok jest przestępny to:

bool is_leap_year(unsigned year) {
    return ((year & 3) == 0 && ((year % 25) != 0 || (year & 15) == 0));
}

 

komentarz 20 października 2018 przez Świeżak01 Nowicjusz (180 p.)
A nie da się tego zrobić z instrukcją warunkową if? Wątpię, by program sprawdzający mi to zaakceptował (wchodzi tylko to co już było na wykładach ech) :/
komentarz 20 października 2018 przez mokrowski VIP (146,440 p.)
if(is_leap_year(year)) {

}

 

komentarz 20 października 2018 przez Świeżak01 Nowicjusz (180 p.)
Dziękuję!

Podobne pytania

0 głosów
1 odpowiedź 238 wizyt
pytanie zadane 1 czerwca 2016 w C i C++ przez Maniutek Użytkownik (520 p.)
0 głosów
1 odpowiedź 67 wizyt
pytanie zadane 1 listopada 2019 w C i C++ przez forritarik Nowicjusz (120 p.)
0 głosów
1 odpowiedź 360 wizyt

85,871 zapytań

134,644 odpowiedzi

298,914 komentarzy

56,739 pasjonatów

Advent of Code 2021

Top 15 użytkowników

  1. 926p. - rucin93
  2. 925p. - Whistleroosh
  3. 912p. - nidomika
  4. 876p. - adrian17
  5. 867p. - Michal Drewniak
  6. 866p. - Mikbac
  7. 863p. - Mateusz Bogdan
  8. 859p. - CC PL
  9. 797p. - Argeento
  10. 704p. - ScriptyChris
  11. 683p. - tokox
  12. 660p. - Vinox
  13. 645p. - TheLukaszNs
  14. 642p. - s. Dorota Kowalewska
  15. 601p. - Marcin Harasimowicz
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...