#include <stdlib.h>
#include <string.h>
struct date_time
{
int year;
int month;
int day;
}DATE;
int main()
{
int i,len,flag,day_cnt;
char str[50],buf[10];
struct date_time date;
int mon[12];
while(1)
{
//初始化月份數組
for(i=0;i<12;i++) mon[i] = 31;
mon[1] = 28;
mon[3] = 30;
mon[5] = 30;
mon[8] = 30;
mon[10] = 30;
printf("please input date eg(20010203):");
memset(str,0,50);
scanf("%s",str);
len = strlen(str);//20121212
if(len!=8)//長度不對直接報錯 0000 - 9999
{
printf("input error!\n");
continue;
}
flag = 1;
while(len--)//不是數字報錯
{
if(str[len]<'0'||str[len]>'9')
{
printf("input error!\n");
flag = 0;
break;
}
}
if(flag)//如果上面檢測有錯 不進行if裏面的操作
{
//判斷是否為閏年
memset(buf,0,10);
strncpy(buf,str,4);
date.year = atoi(buf);
//printf("date.year = %d \r\n",date.year);
if((date.year%4==0)&&(date.year%100!=0)||(date.year%400==0)) mon[1]=29;
//判斷月份是否合法
memset(buf,0,10);
strncpy(buf,str+4,2);
date.month = atoi(buf);
//printf("date.month = %d \r\n",date.month );
if(date.month>12||date.month<1)
{
printf("month input error!\n");
continue;
}
//判斷日期是否合法
memset(buf,0,10);
strncpy(buf,str+6,2);
date.day= atoi(buf);
//printf("date.day = %d \r\n",date.day);
if(date.day>31||date.day<1)
{
printf("day input error!\n");
continue;
}
//比如輸入20050525 有4個月+25天
//把數組前4個月的天數加起來 分別對應數組下標0 1 2 3
//所以下面循環要月份減壹
day_cnt = 0;
for(i=0;i<date.month-1;i++)
{
day_cnt += mon[i];
printf("mon[%d] = %d \r\n",i,mon[i]);
}
day_cnt += date.day;
printf("days = %d \r\n",day_cnt);
break;
}
}
return 0;
}
樓主 求分!不懂可以給我留言!