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