#include<iostream>
using namespace std;
void NextDay( int & year , int & month , int & day )
{
if( year % 4 == 0 && year % 100 != 0 || year % 400 == 0 )
{
if( month == 12 && day == 31 )
{
year += 1;
month = 1 ;
day = 1 ;
}
else
{
if( ( month == 2 && day == 29 )
||
( ( month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 ) && day == 31 )
||
( ( month == 4 || month == 6 || month == 9 || month == 11 ) && day == 30 )
)
{
month += 1;
day = 1 ;
}
else
{
day += 1;
}
}
}
else
{
if( month == 12 && day == 31 )
{
year += 1;
month = 1 ;
day = 1 ;
}
else
{
if( ( month == 2 && day == 28)
||
( ( month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 ) && day == 31 )
||
( ( month == 4 || month == 6 || month == 9 || month == 11 ) && day == 30 )
)
{
month += 1;
day = 1 ;
}
else
{
day += 1;
}
}
}
}
int main ()
{
char c , point = 46;
int year , month , day ;
cin >> year >> point >> month >> point >> day ;
while( scanf("%c",&c) )
{
getchar();
if( c == '#' ) break;
NextDay( year , month , day );
cout << year << point << month << point << day ;
}
return 0 ;
}
方法二
#include <stdioh>
#include <stdlibh>
#include <stringh>
#include <windowsh>
typedef struct //定义的日期结构体
{
int Year;
int Month;
int Day;
}Date;
Date addADay(Date date,int n) //增加一天的函数
{
if(dateDay>n)
{
dateDay%=n;//如果大于n(每月的最多天数)天,day=day%n;
dateMonth++;
if(dateMonth>12) dateMonth%=12,dateYear++;
}
return date;
}
int rightDay(Date date) //判断输入的数据是否合法
{
if((dateMonth==1||dateMonth==3||dateMonth==5||dateMonth==7||dateMonth==8||dateMonth==10||dateMonth==12)&&dateDay<=31) return 1;
else if((dateMonth==4||dateMonth==6||dateMonth==9||dateMonth==11)&& dateDay<=30) return 1;
else
{
if((dateYear%4==0&&dateYear%100!=0||dateYear%400==0) && dateDay<=28) return 1;
else if(dateDay<=29) return 1;
}
return 0;
}
int main()
{
char c,point;
Date aDate;//定义一个Date变量
while(1) //直到合法输入为止
{
scanf("%d%c%d%c%d",&aDateYear,&point,&aDateMonth,&point,&aDateDay);//日期输入
if(aDateMonth<12&&rightDay(aDate)) break;//
MessageBox(NULL,"输入数据违法,请重新输入!","错误提醒",MB_OK);//此句为消息框提醒,用这个要加头文件#include <windowsh>你可以输入一个非法的日期试一下效果。不用的话把这句和头文件一起删去就行了
}
while(scanf("%c",&c)) //具体对日期的 *** 作
{
getchar();////此处是为了接收enter键的,因为enter键也是一个字符,如果不加这句话则会输出两个日期,你可以试一下。//
if(c=='#') break;
aDateDay++;
if(aDateMonth==1||aDateMonth==3||aDateMonth==5||aDateMonth==7||aDateMonth==8||aDateMonth==10||aDateMonth==12)//每月31天的月份 *** 作
{
aDate=addADay(aDate,31);
}
else if(aDateMonth==4||aDateMonth==6||aDateMonth==9||aDateMonth==11)//每月30天的月份 *** 作
{
aDate=addADay(aDate,30);
}
else{
if(aDateYear%4==0&&aDateYear%100!=0||aDateYear%400==0) aDate=addADay(aDate,28);//闰月28天
else aDate=addADay(aDate,29);//否则29天
}
printf("%d%d%d\n",aDateYear,aDateMonth,aDateDay);//日期的输出
}
return 0 ;
}
这是每按一个键就会输出下一天 直到按#为止 你的要求更简单一点
全部测试成功
以上就是关于c++ 用时间函数 处理日期 (见问题)全部的内容,包括:c++ 用时间函数 处理日期 (见问题)、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)