Dziwne zachowanie programu ANSI C

0

Witam,
mam problem z moim programem, który na podstawie daty podaje, jaki dzień tygodnia przypada na tą datę. Funkcja wypisuje na ekranie dzień tygodnia przypadający na datę, którą podaje się z klawiatury. Bierzemy pod uwagę lata 2000 - 2020. Do wykonania zadania została użyta informacja, że 1 styczeń 2000 wypadł w sobotę.

Program fajnie wypisuje mi dzień tygodnia, ale tylko jak podam 2000 rok, potem już się tylko zawiesza :/

Proszę o pomoc i cenne wskazówki :) Z góry przepraszam, jeśli kod jest nieczytelny :/

Oto program:

#include <stdio.h>
#include <stdlib.h>
char WorkingDay(int Year, int Month, int Day)
{
int i,j,z=12,c=0,k,r=-1;

char* tab[]={"Sobota", "Niedziela", "Poniedzialek", "Wtorek", "Sroda", "Czwartek", "Piatek"};
int tab1[]={31,28,31,30,31,30,31,31,30,31,30,31};


for (i=2000; i<=Year;i++)
{
    if((i==2000) || (i==2004) || (i==2008) || (i==2012) || (i==2016) || (i==2020)) tab1[1]=29; else tab1[1]=28;
	for (j=1;j<=z;j++)
	{
		if ((i==Year)&&(j==Month)){ z=Month;}
		for (k=1;k<=tab1[c]; k++)
		{
		    r++;
			if (j==z){tab1[c]=Day;}
			if(r==7) r=0;

		}
		c++;
	}
}
 printf("%s",tab[r]);

}

main()
{
int rok,miesiac,dzien;
do
{
printf("podaj rok ");
scanf("%d", &rok);
fflush(stdin);
printf("podaj miesiac ");
scanf("%d", &miesiac);
fflush(stdin);
printf("podaj dzien ");
scanf("%d", &dzien);
fflush(stdin);
} while(2000>rok>2020, miesiac>12);
return WorkingDay(rok, miesiac, dzien);
getchar();
}

0

Przecież to nie ma prawa sie kompilować...

0

może użyj modulo 7... :)

3

Nie da się na to patrzeć, problem masz prawie w każdym miejscu, powodem zawieszania się jest while(2000>rok>2020, miesiac>12); - czyli brak umiejętności zapisania nawet prostego warunku.
Radzę przeczytać jednak jakiś kurs.
To zadanie właściwie w jednym wierszu się rozwiązuje, dla dowolnego roku naszej ery w kalendarzu Gregoriańskim:

#include <stdio.h>

int main()
  {
   const char *weekday[]={"poniedziałek","wtorek","sroda","czwartek","piatek","sobota","niedziela"};
   unsigned Y,M,D;
   for(;;)
     {
      printf("Podaj date w formacie dd.mm.rrr: ");
      if(scanf("%u.%u.%u",&D,&M,&Y)==3)
        {
         printf
           (
            "%s\n\n",
            weekday[(365*(Y-1)+((Y-1)>>2)-((Y-1)/100)+((Y-1)/400)+30*(M-1)+((M+(M>8))>>1)-(2-!(Y%4)+!(Y%100)-!(Y%400))*(M>2)+D-1)%7];
           );
        }
      while(getchar()!='\n') {}
     }
   return 0;
  }
0

Cały czas się uczę :/
Najgorsze dla mnie jest to, że za bardzo kombinuję, a prosty sposób rozwiązania leży tuż obok :/
Dzięki za pomoc :)

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