MyException - 我的异常网
当前位置:我的异常网» C++ » 发动大家找异常(小弟我没辙了)

发动大家找异常(小弟我没辙了)

www.MyException.Cn  网友分享于:2013-02-21  浏览:3次
发动大家找错误(我没辙了)
下面主函数中的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上如下描述第二个参数

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有