这个程序有什么问题啊,调用checkrw函数时为什么不能在输出月日历的时候提示任务
#include<stdio.h>#include<windows.h>#define N 100void festival(int yue,int k); void delete(); void save(); int memorandum(); void add(); void load(); void checkrw();int menue();void operatemenue();void operatememorandum();int assessyear(int year);void howmanydays(int year,int *m);int yeardays(int year );int monthdays(int year,int yue,int *m);void printyear(int year,int *m,int n);void printmonth(int year,int *m,int yue);void printrunnian(int year); struct remind { char things[100]; }rw[N]; int lenr;void main(){ load(); operatemenue();}int menue() /*菜单函数*/{ int chose; printf("\t\t\t\t\n\n\n"); printf("\t\t\t\t 欢迎来到万年历系统\n\n\n"); printf("\t\t\t\t****************************\n"); printf(" \t\t\t\t 1.查看月日历 \n\n"); printf(" \t\t\t\t 2.查看年日历 \n\n"); printf(" \t\t\t\t 3.备忘录系统 \n\n") ; printf(" \t\t\t\t 4.退出系统 \n\n"); printf("\t\t\t\t****************************\n\n"); printf("请选择\n"); do{ /*用do while实现输错后重新输入*/ scanf("%d",&chose); if(chose!=1&&chose!=2&&chose!=3) printf("你输入错误请重新输入\n"); } while(chose!=1&&chose!=2&&chose!=3); return chose;}void operatemenue() /*菜单处理函数*/{ int n=0,month,year,yue,day,k; n=menue(); switch(n) { case 1:printf("查看月日历\n"); printf("请输入你想查看的年份、月份和日期:\n"); scanf("%d%d%d",&year,&yue,&k); howmanydays(year,month); festival( yue, k); checkrw(year,yue,k); printmonth(year,month,yue); break; case 2:printf("查看年日历\n"); printf("请输入你想查看的年份、月份和日期\n"); scanf("%d%d%d",&year,&yue,&k); printf("年份:%d\n",year); howmanydays(year,month); festival( yue, k); printyear(year,month,12); break; case 3: operatememorandum(); checkrw(yue,k);break; case 4:printf("退出系统\n"); exit(0); break; }}int assessyear(int year) /*判断润年或非润年的函数*/{ int leap; if((year%4==0&&year%100!=0)||(year%400==0)) leap=1; else leap=0; return leap;}void howmanydays(int year,int *m) /*每月多少天函数*/{ int i,n; i=assessyear(year); for(n=1;n<=7;n=n+2) *(m+n)=31; *(m+8)=31;*(m+10)=31;*(m+12)=31; *(m+4)=30;*(m+6)=30;*(m+9)=30;*(m+11)=30; *m=0; if(i==1) *(m+2)=29; else *(m+2)=28;}int yeardays(int year) /*从公元1900年到你输入的上一年共有多少天*/{ int y,j,day=0; for(y=1;y<year;y++) { j=assessyear(year); if(j==1) day+=366; else day+=365; } return day;}int monthdays(int year,int month,int *m) /*从公元1900年到你输入的上一月共有多少天*/{ int i,day=0; day=yeardays(year); for(i=1;i<month;i++) day+=(*(m+i)); return day;}void printmonth(int year,int *m,int yue) /*输出月日历*/{ int leap,k=1,day,x; printf("\t\t%d年%d月\n",year,yue); printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六\n"); day=monthdays(year,yue,m); day-=1; /*输入的月份的上一个月到公元1900年一月一日相差的天数*/ while(k<=*(m+yue)) { leap=(day+k)%7; /*寻找一号对应星期几*/ for(x=0;x<leap;x++) printf(" "); for(x=leap;x<=6;x++,k++) if(k>*(m+yue)) /*当k超过本月的最大天数也就意味着它不能在和星期几对应了*/ continue; else printf(" %-4d",k); printf("\n\n"); }}void printyear(int year,int *m,int n) /*一年的日历*/{ int day,i,k=1,leap,x; day=yeardays(year); day=day-1; /*从公元1900年到你输入的年份的上一年相差几天*/ printf("年份:%d的日历\n",year); for(i=1;i<=n;i++) { printf("\t\t%d月\n",i); printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六\n"); k=1; /*k重新赋值为一有利于找到下个月1号的位置*/ while(k<=*(m+i)) /*一个月的日历*/ { leap=(day+k)%7; for(x=0;x<leap;x++) printf(" "); for(x=leap;x<=6;x++,k++) if(k>*(m+i)) /*当k超过本月的最大天数也就意味着它不能在和星期几对应了*/ continue; else printf(" %-4d",k); printf("\n"); } day=day+*(m+i); printf("\n"); }}void festival(int yue,int k) /*判断是否公历节日*/{if(yue==1) switch(k){case 1:printf("这天是元旦\n\n"); Beep(500,500);}if(yue==2) switch(k){case 14:printf("这天是情人节\n\n");Beep(500,500);}if(yue==3) switch(k){case 8:printf("这天是妇女节\n\n"); Beep(500,500); break;case 12:printf("这天是植树节\n\n");Beep(500,500);}if(yue==4) switch(k){case 1:printf("这天是愚人节\n\n");Beep(500,500);}if(yue==5) switch(k){case 1:printf("这天是劳动节\n\n"); Beep(500,500); break;case 4:printf("这天是青年节\n\n");Beep(500,500);}if(yue==6) switch(k){case 1:printf("这天是儿童节\n\n"); Beep(5,500);}if(yue==7) switch(k){case 1:printf("这天是建党节\n\n");Beep(500,500);}if(yue==8) switch(k){case 1:printf("这天是建军节\n\n");Beep(500,500);}if(yue==9) switch(k){case 10:printf("这天是教师节\n\n");Beep(500,500);}if(yue==10) switch(k){case 1:printf("这天是国庆节\n\n");Beep(500,500);}}int memorandum(){ int chose; printf("\t\t\t\t\t 备忘录系统\n\n\n"); printf("\t\t\t\t***************************\n\n"); printf("\t\t\t\t\t1.添加备忘录\n\n"); printf("\t\t\t\t\t2.删除备忘录\n\n"); printf("\t\t\t\t\t3.退出系统\n\n"); printf("\t\t\t\t***************************\n\n\n"); printf("请选择\n"); do{ /*用do while实现输错后重新输入*/ scanf("%d",&chose); if(chose!=1&&chose!=2&&chose!=3) printf("你输入错误请重新输入\n"); } while(chose!=1&&chose!=2&&chose!=3); return chose;}void operatememorandum() { int n;n=memorandum(); switch(n) { case 1:add();break; case 2:delete();break; case 3:exit(0); break; }} void save() //保存信息{FILE *fp;if((fp=fopen("renwu.text","wb"))==NULL){printf("文件打开失败!");exit(0);}fwrite(&rw,sizeof(struct remind),N,fp);//写入文件fclose(fp);} void load(){ FILE *fp;int i; if((fp=fopen("renwu.text","rb"))==NULL) fopen("renwu.text","wb"); else{ fread(&rw,sizeof(struct remind),N,fp);//读取文件 for(i=0,lenr=0;i<N;i++) { if(strlen(rw[i].things)!=0) lenr++; }//计算日程条数 fclose(fp);}} void checkrw(year,yue,k)//检查是否有任务提醒{int i,tmonth,tday,tyear;load();for(i=0;i<lenr;i++){ if(tyear==year&&tmonth==yue&&tday==k) { printf("任务提醒:"); puts(rw[i].things);//显示提醒 Beep(500,500); }}}void add() //增加任务提醒{ int i,tmonth,tday,tyear; i=lenr; printf("请输入提醒年月日:"); scanf("%d%d%d",&tyear,&tmonth,&tday); printf("请输入提醒内容:"); scanf("%s",&rw[i].things); lenr++;//提醒数加1 save(); printf("添加成功!");}void delete() //删除提醒{ int i,j; printf("_______________________________________________________________________\n"); printf("编号 提醒内容\n"); load(); for(i=0;i<lenr;i++) printf("%-3d %s\n",i,rw[i].things ); printf("_______________________________________________________________________\n"); printf("请输入要删除的编号:"); scanf("%d",&i); while(i<0 || i>=lenr) {printf("输入错误请重新输入:"); scanf("%d",&i); } rw[i].things[0]='\0'; /*删除*/ lenr--;//任务个数减一 for(j=i;j<lenr;j++) rw[j]=rw[j+1]; save(); printf("___________________________________________________\n"); printf("编号 提醒内容\n"); for(i=0;i<lenr;i++) printf("%-3d %s\n",i,rw[i].things ); printf("______________________________________________________\n"); printf("删除成功!");}