发动大家找错误(我没辙了)
下面主函数中的while循环中老是能输出1900-2-29,但1900是平年,不会有29天,而date类的构造函数中加入了处理这种情况的函数process(),主函数开始的date(1900,2,29)为什么能构建正确?难道与随机函数有关?大家帮帮我......
#include <iostream>
#include <cstdlib>
#include "date.h"
using namespace std;
using namespace zhw;
int main(void)
{
date da(1900,2,29); //为什么此处能正确构造
if(da.isError()) cout<<"\n不正确的日期\n";
cout<<da.datetostr()<<endl; //
cout<<asctime(&da)<<endl; //
/*
time_t t=0;
tm* ptr=localtime(&t); //1970.1.1
cout<<asctime(ptr); //输出1970
*/
int a,b,c,d=16000,i=0;
int e,f,g;
srand((unsigned)time(0));
while(d--)
{
a=rand()%2014;
b=rand()%13;
c=rand()%32;
e=rand()%2014;
f=rand()%13;
g=rand()%32;
date dd(a,b,c);
date ddd(e,f,g);
//dd.process();
//ddd.process();
//if(dd.isError()) cout<<"dd\n";
//if(ddd.isError()) cout<<"ddd\n";
a=difmonth(dd,ddd);
b=difmonth_t(dd,ddd);
if(a!=b)
{ //为何此处能输出1900-2-29,构造函数中加入了process的啊
cout<<dd.datetostr()<<" a:"<<a<<endl<<ddd.datetostr()
<<" "<<b<<endl<<endl;
++i;
}
}
if(0 == i)
cout<<"\n两求相差月数函数结果相等\n"<<endl;
return 0;
}
date.h /date.cpp 较长,为方便大家我专门写了篇博客 见:
http://blog.csdn.net/c_rrb/article/details/8561188
------解决方案--------------------date da(1900,2,29); //为什么此处能正确构造
=====================
构建器date::date(int y,int m,int md,int h,int mi,int s,int is)开始就给日月年赋值,然后调用了process(),还以为你会处理,跟进去没看到判断闰年的代码啊
------解决方案-------------------- date da(1900,2,29); 因为你的其他参数有默认值,第二个问题,你单步跟踪一下。
------解决方案--------------------有什么奇怪的吗?
date da(1900,2,29);表示的是3月29日,msdn上如下描述第二个参数