输入某年某月某日,判断这一天是这一年的第几天?帮改改内容

#include <iostream>
using namespace std;
struct
{
int year;
int month;
int day;
}date;
int main()
{
int i,days;
int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
cout<<"input year,month,day:";
cin>>date.year>>date.month>>date.day;
days=0;
for (i=1;i<date.month;i++)
{
days+=day_tab[i];
}
days+=date.day;
if ((date.year%4==0 && date.year%100!=0 || date.year%400==0) && date.month>=3)
{
days+=1;
}
cout<<date.month<<"/"<<date.day<<" is the "<<days
<<"th day in "<<date.year<<"."<<endl;
return 0;
}

这个程序最后即使输出2011年13月35日或者2011年2月38日也有结果!老师说这是一个漏洞,让改改
谢谢~~

#include <iostream>
using namespace std;

bool isLeapYear(int y); //声明
bool inputRight(int y, int m, int d); //声明

//定义日期结构体,包括年、月、日
struct
{
int year; //年
int month; //月
int day; //日
}date; //声明实体日期date

int main()
{
int i,days; //设输入日期在该年中为第days天

//每年12个月的天数存放在数组里,2月初始为平年
int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

cout<<"input year,month,day:";

//输入年月日
cin>>date.year>>date.month>>date.day;
//判断输入是否正确,不正确则重新输入
while(!inputRight(date.year, date.month, date.day))
{
cout << "intput error!please input again:"<<endl;
cin>>date.year>>date.month>>date.day;
}

//初始化days
days=0;

//从第1个月到输入月数的前一个月累加天数
for (i=1;i<date.month;i++)
{
days+=day_tab[i];
}

//累加输入当月的天数
days+=date.day;

//判断闰年,如果是闰年,则多加一天
if (isLeapYear(date.year) && date.month>=3)
{
days+=1;
}

//输出结果
cout<<date.month<<"/"<<date.day<<" is the "<<days
<<"th day in "<<date.year<<"."<<endl;

return 0;
}

//判断输入日期是否正确
bool inputRight(int y, int m, int d)
{
if(y<1 || m<1 || m>12 || d<1 || d>31)
{
return false;
}
if(m==4 || m==6 || m==9 || m==11)
{
if(d>30)
{
return false;
}
}
if(m==2)
{
if(isLeapYear(y))
{
if(d>29)
{
return false;
}
}
else
{
if(d>28)
{
return false;
}
}
}
return true;
}

//判断是否为闰年
bool isLeapYear(int y)
{
if(date.year%4==0 && date.year%100!=0 || date.year%400==0)
{
return true;
}
return false;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-07
#include <iostream>
using namespace std;
struct
{
int year;
int month;
int day;
}date;
int main()
{
int i,days;
int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
cout<<"input year,month,day:";
cin>>date.year>>date.month>>date.day;

if(date.month <1 || date.month >12 || date.day<1 || date.day>31)//检查月份和天数不越界,粗筛
{
cout<<"Wrong input!"<<endl;
return - 1;
}
if(date.day > day_tab[date.month]) //检查天数不超过当前月份最多天数
{
if(date.day==29 && date.month==2 && (date.year%4==0 && date.year%100!=0 || date.year%400==0)); //如果是闰年2月,且是29日,则不报错
else //否则报错
{
cout<<"Wrong input!"<<endl;
return - 2;
}
}

days=0;
for (i=1;i<date.month;i++)
{
days+=day_tab[i];
}
days+=date.day;
if ((date.year%4==0 && date.year%100!=0 || date.year%400==0) && date.month>=3)
{
days+=1;
}
cout<<date.month<<"/"<<date.day<<" is the "<<days
<<"th day in "<<date.year<<"."<<endl;
return 0;
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网