高手帮忙解决一下,看得小弟头痛啊!
这段代码能编译,但是第三项再输入日期后程序就会抱错.导致程序会被退出.
#include <stdio.h>
#include <stdlib.h>
char* month_str[]={ "一月 ", "二月 ", "三月 ", "四月 ", "五月 ", "六月 ", "七月 ", "八月 ", "九月 ", "十月 ", "十一月 ", "十二月 "};
char* week[]={ "星期日 ", "星期一 ", "星期二 ", "星期三 ", "星期四 ", "星期五 ", "星期六 "};
int IsLeapYear(int year) /*判断是否是闰年*/
{
if((year%4==0&&year%100!=0)||(year%400==0))
return 1;
else
return 0;
}
int month_day(int year,int month)
{
int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(IsLeapYear(year)&&month==2)
return 29;
else
return(mon_day[month-1]);
}
int DaySearch(int year,int month,int day) /*判断该日期是星期几?*/
{
int c=0;
float s;
int m;
for(m=1;m <month;m++)
c=c+month_day(year,m);
c=c+day;
s=year-1+(float)(year-1)/4+(float)(year-1)/100+(float)(year-1)/400-40+c;
return ((int)s%7);
}
int PrintMonth(int year,int month)/*打印月份*/
{
int temp,i;
printf( "\n\n%s\n ",month_str[month-1]);
printf( "0 1 2 3 4 5 6 \n ");
temp=DaySearch(year,month,1); /*计算该月的第一天是星期几?*/
for(i=1;i <=month_day(year,month)+temp;i++)
{
if(i-temp <=0)
printf( " ");
else if(i-temp <10)
printf( "%d ",i-temp);
else
printf( "%d ",i-temp);
if(i%7==0)
printf( "\n ");
}
return 0;
}
int main(void)/*主函数开始*/
{
int option,da;
char ch;
int year,month,day;
printf( " Summer 的课程设计\n\n ");
while(1)
{
printf( "\n 1.查询该日期是星期几. ");
printf( "\n 2.查询是否是闰年. ");
printf( "\n 3.输入要打印的月份. ");
printf( "\n 4.退出程序.\n ");
scanf( "%d ",&option);
switch(option)
{
case 1:
while(1)
{
printf( "\n请输入年月日(XXXX,XX,XX): ");
scanf( "%d,%d,%d ",&year,&month,&day);
da=DaySearch(year,month,day);
printf( "\n%d-%d-%d是%s,你要继续吗?(Y/N) ",year,month,day,week[da]);
fflush(stdin);
scanf( "%c ",&ch);
if(ch== 'N '||ch== 'n ')
break;
}
break;
case 2:
while(1)
{
printf( "\n请输入要查询的年份?(XXXX) ");
scanf( "%d ",&year);
if(IsLeapYear(year))
printf( "\n%d是闰年,你要继续吗?(Y/N) ",year);
else
printf( "\n%d不是闰年,你要继续吗?(Y/N)? ",year);
fflush(stdin);
scanf( "%c ",&ch);
if(ch== 'N '||ch== 'n ')
break;
}
break;
case 3:
while(1)
{
printf( "\n请输入要打印的某年的月份(XXXX,XX) ");
scanf( "%d ", "%d ",&year,&month);
PrintMonth(year,month);
printf( "\n你要继续打印吗?(Y/N)? ");
fflush(stdin);
scanf( "%c ",&ch);
if(ch== 'N '||ch== 'n ')
break;
}
break;
case 4:
fflush(stdin);
printf( "你确定退出吗?(Y/N) ");
scanf( "%c ",&ch);
if(ch== 'Y '||ch== 'y ')
exit(0);
break;
default:
printf( "\n出错了,请输入指定的数字!\n ");
break;
}
}
return 0;
}
[解决办法]
scanf( "%d ", "%d ",&year,&month);这句有问题,改成
scanf( "%d,%d ",&year,&month);就可以了
[解决办法]
我晕,看了老半天,原来是
scanf( "%d ", "%d ",&year,&month);//出错了
改成:
scanf( "%d,%d ",&year,&month);// "参数 "
这个程序作的不错~ 呵呵。
[解决办法]
呃。。。。。。。
确实不错