Trzy funkcje bool, sprawdzanie IF'a

0

Witam serdecznie.
Mój program, posiada trzy funkcje typu bool

 bool IsValidDate(struct date a)
{
    if (a.month > 0 && a.month<13 && a.day>0 && a.day < 32)
    {

        return true;
    }
    else
    {
        return false;
    }
}
bool IsValidDate2(struct date a)
{
    if (a.month == 2 && a.day == 30 || a.day == 31 && a.month == 4 && a.day == 31 || a.month == 6 && a.day == 31 || a.month == 9 && a.day == 31 || a.month == 11 && a.day == 31)
    {
        return false;
    }
    else
    {
        return true;
    }
}
bool IsLeapYear(struct date a)
{
    if (a.year % 4 == 0 && a.year % 100 != 0 || a.year % 400 == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool IsValidDate3(struct date a)
{
    if (a.year % 4 == 0 && a.year % 100 != 0 || a.year % 400 == 0)  // I tried to use function IsLeapYear, but I had error(not declared  birthday), so I don't have a better idea to do it in another way.
    {
        if (a.month == 2 && a.day == 29)
        {
            return false;
        }
    return true;
    }
    else
    {
        return true;
    }

IsValidDate - dba o to, aby użytkownik nie podał nieistniejącego miesiąca, lub ilości jego dni.
IsValidDate2 - z dokładnością dba o niektóre miesiące.
IsValidDate3 - Dba o to, aby w rok przestępnym luty mógł mieć 29 dni.

IF: Wygląda tak:

 if (IsValidDate(birthday) && IsValidDate2(birthday) && IsValidDate3(birthday))
    {
        ShowDate(birthday);
    }
    else
    {
        printf("BAD DATE!!\n");
    }

Czy ktoś mógłby mnie nakierować, gdzie popełniam błąd?
Z góry bardzo dziękuję.
Pozdrawiam!

0

Problem się pojawia się wtedy, gdy użytkownik wpiszę 29 luty. Nie wiem po prostu jak ułożyć if'a, tak, azeby wszystko współgrało :)

0

OK, poradziłem sobie - sorry za zaśmiecanie forum :) Nauczka na następny raz, próbować dłużej samemu popracować nad kodem, a potem zawracać wam tyłek na forum =D

1

Wiesz co to jest debugger? Z jego pomocą wystarczyłoby ci jedno uruchomienie programu i miałbyś odpowiedź co jest nie tak. Staraj się czytelniej nazywać funkcje i czytelniej prowadzić kod. Zwracaj uwagę na priorytety operatorów, np. w warunku:

if (a.month == 2 && a.day == 30 || a.day == 31 && a.month == 4 && a.day == 31 || a.month == 6 && a.day == 31 || a.month == 9 && a.day == 31 || a.month == 11 && a.day == 31)

jaki będzie wynik dla 31 lutego?

ZłotyKot napisał(a):

OK, poradziłem sobie - sorry za zaśmiecanie forum :)

Jeśli znalazłeś odpowiedź na pytanie, które zadałeś na forum kultura wymaga abyś podzielił się nią ze społecznością.

0

Dzięki za uwagę z

 if (a.month == 2 && a.day == 30 || a.day == 31 && a.month == 4 && a.day == 31 || a.month == 6 && a.day == 31 || a.month == 9 && a.day == 31 || a.month == 11 && a.day == 31)

poprawiłem na :

    if (a.month == 2 && a.day == 30 || a.month == 2 && a.day == 31 && a.month == 4 && a.day == 31 || a.month == 6 && a.day == 31 || a.month == 9 && a.day == 31 || a.month == 11 && a.day == 31)

Co do pierwszego problemu, to funkcja IsValidDate3 wygląda teraz tak:

 bool IsValidDate3(struct date a)
{
if (a.month == 2 && a.day == 29)
        {
    if (a.year % 4 == 0 && a.year % 100 != 0 || a.year % 400 == 0)
    {

            return true;
        }

    else
    {
        return false;
    }
}
}

Wystarczyło najpierw sprawdzić, czy data to 29 luty, jeżeli tak, to w zależności od roku wysłać odpowiednią wartość :)

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