C语言定义一个结构体变量(包括年、月、日),输入一个日期,计算该日在本年中是第几天。

①考虑润年问题②输入的信息为数字以外时要提示错误信息③输入的信息超过相应位数时,只取前面相应位数的信息④输入的年月日不正确的时候需要提示错误信息由于要求很严格必须每个功能... ①考虑润年问题 ②输入的信息为数字以外时要提示错误信息 ③输入的信息超过相应位数时,只取前面相应位数的信息 ④输入的年月日不正确的时候需要提示错误信息 由于要求很严格必须每个功能都实现,,跪求高手解答! 展开
 我来答
可可托海的牧羊人Do
2012-05-17 · TA获得超过303个赞
知道小有建树答主
回答量:209
采纳率:0%
帮助的人:89.2万
展开全部
#include <stdio.h>
#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;
}
楼主 求分!不懂可以给我留言!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式