用C语言写一个日历
#include<stdio.h>
int start_year = 1970;
int start_month = 1;
int start_day = 1;
int char_to_int(char *s, int size)
{
int result = 0;
int level = 1;
int i = size - 1;
if (*(s+1) > '9' || *(s+1) < '0')
{
return (*s - '0');
}
else
{
for(i; i>=0; i--)
{
result += (s[i] - '0')*level;
level *= 10;
}
}
return result;
}
int count_week(int year, int month, int day)
{
int days = 0;
int week = 0;
int i = 0;
days += (year-start_year)*365;
for(i = start_year; i<year; i++)
{
if((i%4 == 0 && i%100 != 0) || i%400 == 0)
{
days++;
}
}
switch(month)
{
case 1:
days += 0; break;
case 2:
days += (0+31); break;
case 3:
days += (0+31+28); break;
case 4:
days += (0+31+28+31); break;
case 5:
days += (0+31+28+31+30); break;
case 6:
days += (0+31+28+31+30+31); break;
case 7:
days += (0+31+28+31+30+31+30); break;
case 8:
days += (0+31+28+31+30+31+30+31); break;
case 9:
days += (0+31+28+31+30+31+30+31+31); break;
case 10:
days += (0+31+28+31+30+31+30+31+31+30); break;
case 11:
days += (31+0+28+31+30+31+30+31+31+30+31); break;
case 12:
days += (0+31+28+31+30+31+30+31+31+30+31+30); break;
defult:
days += 0;
}
if(month > 2)
{
if((year%4 == 0 && year%100 != 0) || year%400 == 0)
{
days ++;
}
}
days += day;
week = (4+days-1)%7;
return week;
}
void show(int year, int month, int day)
{
int i = 0;
int j = 0;
int k = 0;
int n = 0;
int d_start = 0;
int maxday = 0;
d_start = count_week(year, month, 1);
switch(month)
{
case 1:
maxday = 31; break;
case 2:
maxday = 28; break;
case 3:
maxday = 31; break;
case 4:
maxday = 30; break;
case 5:
maxday = 31; break;
case 6:
maxday = 30; break;
case 7:
maxday = 31; break;
case 8:
maxday = 31; break;
case 9:
maxday = 30; break;
case 10:
maxday = 31; break;
case 11:
maxday = 30; break;
case 12:
maxday = 31;
}
if(month == 2)
{
if((year%4 == 0 && year%100 != 0) || year%400 == 0)
{
maxday ++;
}
}
for(i = 0; i<7; i++)
{
for(j = 0; j<7; j++)
{
if (n > maxday)
{
return;
}
if (n == day)
{
printf("[%d] ", n);
n++;
continue;
}
if(i == 0)
{
printf("日 一 二 三 四 五 六");
break;
}
if(i == 1)
{
while(n<d_start)
{
printf(" ");
n++;
}
for (n = 1, k = d_start ; k<7; k++)
{
if (n == day)
{
printf("[%d] ", n);
}
else
{
printf("%d ", n);
}
n++;
}
break;
}
if (n<10)
{
printf("%d ", n);
}
else
{
printf("%d ", n);
}
n++;
}
printf("\n");
}
}
int main(){
char y[10];
char m[5];
char d[5];
int year = 0;
int month = 0;
int day = 0;
printf("Please enter year--> ");
scanf("%s", y);
while((year = getchar()) != '\n' && year != EOF);
printf("Please enter month--> ");
scanf("%s", m);
while((year = getchar()) != '\n' && year != EOF);
printf("Please enter day--> ");
scanf("%s", d);
while((year = getchar()) != '\n' && year != EOF);
year = char_to_int(y, 4);
month = char_to_int(m, 2);
day = char_to_int(d, 2);
show(year, month, day);
printf("\n");
return 0;
}
代码略长,直接看结果
![](https://s1.ax1x.com/2018/03/18/9oEPXV.png)