C语言书上提供的代码,但一直编译不过,大家帮忙看一下怎么回事
# include <stdio.h># include <string.h>
# include <stdlib.h>
main(int x,char **date)
{
int year =0,day=0,month=0,week; //定义整形变量
int d,i,dm,dy,m2;
char WEEK[9];
if(x==1) //判断命令行的传参个数
{
printf("\n ERROR ! you forget to enter the date you want to view \n"); /*没有传参时,输出此提示语句*/
exit(0); /* 退出项目程序*/
}
i=0;
d=-1;
while(date[1][i]) /*遍历传参,进行格式转换*/
{
if((date[1][i]=='/'||date[1][i]=='.')&&d==-1)
{
d=0;
i++;
continue;
}
if((date[1][i]=='/'||date[1][i]=='.')&&d==0)
{
d=1;
i++;
continue;
}
if(d==-1)
{
year=year*10+(date[1][i]-'0');
}
if(d==0)
{
month=month*10+(date[1][i]-'0');
}
if(d==1)
{
day=day*10+(date[1][i]-'0');
}
i++;
}
if(year==2000)
{
dy=0;
m2=1;
goto la_100;
}
/*当输入的年份大于2000或小于2000时,分别根据相应的公式计算出该年到2000年之间闰年所引起的星期差,
然后计算该年1月1日到2000年1月1日的星期差。
相关代码如下*/
if(year>2000)
d=(year-1-2000)/4-(year-1-2000)/100+(year-1-2000)/400+1;
else
d=(year-2000)/4-(year-2000)/100+(year-2000)/400;
dy=(year-2000)+d;
/*该年1月1日到2000年1月1日的星期差*/
/*以上为月引起的星期差和年引起的星期差,还有一个2月份所引起的星期差。
2月份所引起的星期差,需要先判断该年是否为闰年。
若是闰年,则二月份所引起的星期差为1;
若不是闰年,则二月份所引起的星期差为0.
实现代码如下:*/
if((year%4==0 && year%100!=0)||(year%100==0 && year%400==0))
m2=1;
else
m2=0;
la_100: /* **该月以前的月所引起的“星期差”** */
switch(month)
{
case 1:dm=0; /* month在此存放该月天数 */
month=31;
break;
case 2:dm=3;
month=d==1?29:28;
break;
case 3:dm=3+m2;
month=31;
break;
case 4:dm=6+m2;
month=30;
break;
case 5:dm=1+m2;
month=31;
break;
case 6:dm=4+m2;
month=30;
break;
case 7:dm=6+m2;
month=31;
break;
case 8:dm=2+m2;
month=31;
break;
case 9:dm=5+m2;
month=30;
break;
case 10:dm=m2;
month=31;
break;
case 11:dm=3+m2;
month=30;
break;
case 12:dm=5+m2;
month=31;
break;
}
if (day<0||day>month)
{
printf ("\n ERROR! the entered DAY is invalid\n");
exit (0);
}
/*在是吸纳计算星期几模块的过程中首先需要对判定这个日期时星期几而进行公式计算,
即使该日期所对应的这个月的天数加上这个月之前的月引起的星期差和该年1月1日到2000年1月1日所引起的星期差减1再加6对7取余。
相应代码如下*/
week=(dy+dm+day-1+6)%7;
if(week<0)
week=week+7;
/*然后对计算出来的week值进行类型判断,若为0,则将“SUNDAY”复制给WEEK参数
相关代码如下*/
if(day>0) /*判定查看类型*/
{
switch(week)
{
case 0:strcpy(WEEK,"SUNDAY");
break;
case 1:strcpy(WEEK,"MONDAY");
break;
case 2:strcpy(WEEK,"TUESDAY");
break;
case 3:strcpy(WEEK,"WEDNESDAY");
break;
case 4:strcpy(WEEK,"THURSDAY");
break;
case 5:strcpy(WEEK,"FRIDAY");
break;
case 6:strcpy(WEEK,"SATURDAY");
break;
}
printf("\n this day is %s \(%d)\n\n OK!\n",WEEK,week); /*输出提示信息*/
}
/*当传入的参数只输入到月份,未输入具体日期时,对该月所在的日历进行显示
实现代码如下*/
else
{
week=++week%7;
printf("\n the calendar of this month sa following\n");
printf("\n*****************************************\n");
printf("SUN MON TUE WEN THU FRI STA\n");
for(i=0;i<week;i++)
printf(" ");
for(i=1;i<=month;i++) /*输出该月的所有天数*/
{
printf(" %2d ",i);
week++;
if(week%7==0 && i!=month)
printf("\n");
}
printf("\n*****************************************\n");
printf("\n OK \n");
}
我用的微软C++ 编译一直显示有一个error,但却又不显示在哪,,,,我用DEV-C++却能编译通过,这是什么问题??、
我电脑系统是win10 的,是不是微软C++不能在win10上运行???
}