Я пишу программу, которая получает от пользователя month
и year
, а затем распечатывает календарь. Но календарь правильный только в январе (каждые два года).Проблема с домашним заданием календаря в C
Как сделать другие месяцы правильными? Что я делаю не так?
#include "stdafx.h"
void printMonth (int* startDay, int* days);
int _tmain(int argc, _TCHAR* argv[])
{
int startDay, days, year, month, a;
printf("enter year: ");
scanf("%d", &year);
printf("enter month: ");
scanf("%d", &month);
a = year - 1;
startDay = ((a * 365) + (a/4) - (a/100) + (a/400) + 1) % 7;
switch (month)
{
case 1: days = 31;
break;
case 2: days = 28;
break;
case 3: days = 31;
break;
case 4: days = 30;
break;
case 5: days = 31;
break;
case 6: days = 30;
break;
case 7: days = 31;
break;
case 8: days = 31;
break;
case 9: days = 30;
break;
case 10: days = 31;
break;
case 11: days = 30;
break;
case 12: days = 31;
break;
}
printMonth (&startDay, &days);
printf("\nstart day: %d\n", startDay);
printf("\na: %d\n", a);
return 0;
}
void printMonth (int* startDay, int* days)
{
int weekDay;
printf("Sun Mon Tue Wed Thu Fri Sat\n");
printf("--- --- --- --- --- --- ---\n");
for (weekDay = 0; weekDay < *startDay; weekDay++)
printf(" ");
for (int dayCount = 1; dayCount <= *days; dayCount++)
{
if (weekDay > 6)
{
printf("\n");
weekDay = 1;
}
else
weekDay++;
printf("%3d ", dayCount);
}
printf("\n--- --- --- --- --- --- ---\n");
return;
}
Это домашнее задание? Если да, добавьте тег «домашняя работа». –
ok, добавлен тег «домашняя работа»;) –
Почему вы передаете аргументы 'startDay' и' days' в качестве указателей? Они не изменяются функцией 'printMonth()', поэтому вы должны передать их по значению. –