#include <stdio.h>
#include <stdlib.h>
//TEMP = [YEAR - 1] + [(YEAR - 1) / 4] - [(YEAR - 1) / 100] + [(YEAR - 1) / 400] + DAYS
//WEEKDAY = TEMP % 7
int isleapYear(int);
int isweekDay(int,int,int);
int main(void){
do{
system("cls");
int year,month;
printf("請輸入西元年,和月份:");
scanf("%d-%d",&year,&month);
getchar();
printf(" %d年%d月\n",year,month);
printf("--------------------\n");
printf("日 一 二 三 四 五 六\n");
int weekend = isweekDay(year,month,1);
int i;
for (i=0;i<weekend;i++){
printf(" ");
}
int endDay;
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
endDay=31;
}else if(month==2){
if(isleapYear(year)==1){
endDay=29;
}else{
endDay=28;
}
}else{
endDay=30;
}
for(i=1;i<=endDay;i++){
printf("%2d ",i);
if((i+weekend)%7==0){
printf("\n");
}
}
char choose;
printf("請問還要繼續嗎?(yes = 'y' , no = 'n'):");
scanf("%c",&choose);
getchar();
system("pause");
}while(choose == 'y');
printf("\n");
system("pause");
return 0;
}
int isleapYear(int year){
if(year %400 == 0 || year %4 == 0){
return 1;
}else if (year %100 == 0){
return 0;
}else{
return 0;
}
}
int isweekDay(int y, int m, int d){
int days = d;
int i;
for(i=1; i<m ;i++){
if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12){
days+=31;
}else if(i==2){
if(isleapYear(y)==1){
days+=29;
}else{
days+=28;
}
}else{
days+=30;
}
}
int temp = (y-1) + (int)(y-1)/4 - (int)(y-1)/100 + (int)(y-1)/400 + days;
int week = temp%7;
return week;
}
choose 放到while循环外面
【以下回答由 GPT 生成】
请注意,您提供的代码不完整,因此我无法对问题做出确切的回答。从代码片段中可以看出,在函数main()
中声明了两个整型变量year
和month
,但是在代码截断处处于未完成状态。这可能是造成编译器报告“undeclared错误”的原因,因为编译器会在代码的其他部分中查找名为choose
的变量,但是没有找到声明或定义。
如果您能提供完整的代码,我将能够更准确地帮助您解决问题。