读书人

为啥运行不了求解!

发布时间: 2013-10-29 12:07:57 作者: rapoo

为什么运行不了,求解!!!

#include <iostream>
#include <iomanip>

using namespace std;

class MYDATE{
public:
const static int td1y;
const static int td4y;
const static int td100y;
const static int td400y;
const static char dom[12];
const static short tdom[12];
const static char* const dowName[7];
// 星期显示控制标志(默认值false-不显示)
static bool dowFlag;
static int Noly(int year);
static int Dom(int year, int month);
static int Dow(int year, int month, int day);
static int Tdoy(int year, int month, int day);
static long TotalDays(int year, int month, int day);
static bool IsLeap(int year);
static bool IsValid(int year, int month, int day);
MYDATE(int year, int month, int day);
void TotalDays(int totaldays);
int TotalDays()const;
int Tdoy()const;
int Dow()const;
void Set(int, int, int);
void Output() const;
private:
int year, month, day;
};

bool MYDATE::dowFlag = false;

const int MYDATE::td1y = 365;

const int MYDATE::td4y = 4 * 365 + 1;

const int MYDATE::td100y = 100 * 365 + 25 - 1;

const int MYDATE::td400y = 400 * 365 + 100 - 4 + 1;

const char MYDATE::dom[12] = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};

const short MYDATE::tdom[12] = {
0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
};

const char* const MYDATE::dowName[7] = {
"星期一","星期二","星期三",
"星期四","星期五","星期六","星期天"
};

int MYDATE::Noly(int year)
{
return year/4 - year/100 + year/400;
}

int MYDATE::Tdoy(int year, int month, int day)
{
int n = day;
if(month >= 1 && month <= 12)
{
n += tdom[month - 1];
if(month > 2 && IsLeap(year))
{
n++;
}
}
return n;
}

long MYDATE::TotalDays(int year, int month, int day)
{
long t;
t = year - 1;
return t * td1y + Noly(t) + Tdoy(year, month, day);
}

void MYDATE::TotalDays(int totaldays)
{
int n;
if (totaldays <= 0)
{
cout << "不正确的参数!\n";
}
else
{
year = month = day = 1;
totaldays --;

// 按400年计算
n = totaldays / td400y;
year += n * 400;
totaldays -= n * td400y;

// 400年内按100年计算
n = totaldays / td100y;
if (n > 3) n = 3;
year += n * 100;
totaldays -= n * td100y;

// 100年内按4年计算
n = totaldays / td4y;
year += n * 4;
totaldays -= n * td4y;

// 4年内按1年计算
n = totaldays / td1y;
if (n > 3) n = 3;
year += n;
totaldays -= n * td1y;

// 1年内按月计算
while (totaldays >= (n = Dom(year, month)))
{
totaldays -= n;
month ++;
}

// 1月内按日计算
day += totaldays;
}
}

int MYDATE::TotalDays() const
{
int t = year - 1;
return t * 365 + Noly(t) + Tdoy();
}

int MYDATE::Tdoy() const
{
int n = tdom[month - 1] + day;
if (month > 2 && IsLeap(year)) n ++;
return n;
}

int MYDATE::Dow() const
{
return TotalDays() % 7;
}

int MYDATE::Dow(int year, int month, int day)
{
return TotalDays(year, month, day) % 7;
}

int MYDATE::Dom(int year, int month)
{
int n = 0;
if(month >= 1 && month <= 12)
{
n = dom[month - 1];
if(month == 2 && IsLeap(year))
{
n++;
}
}
return n;
}

bool MYDATE::IsLeap(int year)
{
return year%4 == 0 && year%100 !=0 || year%400 == 0;
}

bool MYDATE::IsValid(int year, int month, int day)


{
return year > 0 && month >= 1 && month <= 12 && day >= 1 && day <= Dom(year, month);
}

MYDATE::MYDATE(int year, int month, int day)
{
year = year;
month = month;
day = day;
if(!IsValid(year, month, day))
{
cout<<"输入的日期不正确!"<<endl;
exit(EXIT_FAILURE);
}
}

void MYDATE::Set(int year, int month, int day)
{
if (IsValid(year, month, day))
{
this->year = year;
this->month = month;
this->day = day;
}
else
{
cout << "不正确的参数!\n";
}
}

void MYDATE::Output() const
{
int w = Dow();
cout << setfill('0') << setw(4) << year << '-'
<< setw(2) << (short)month << '-'
<< setw(2) << (short)day << setfill(' ');
if (dowFlag) cout << '(' << dowName[w] << ')';
}

int main()
{
const MYDATE a(1949, 10, 1);
cout << "a = "; a.Output(); cout << endl;
MYDATE::dowFlag = true;
cout << "a = "; a.Output(); cout << endl;
MYDATE::dowFlag = false;
cout << "a = "; a.Output(); cout << endl;
return 0;
}


一运行就弹出错误报告,无法运行,为什么啊?以后碰到类似问题怎么解决啊? 类 C++ 运行错误
[解决办法]
构造函数里赋值加this->
注意变量作用域

MYDATE::MYDATE(int year, int month, int day)
{
this->year = year;
this->month = month;
this->day = day;
if(!IsValid(year, month, day))
{
cout<<"输入的日期不正确!"<<endl;
exit(EXIT_FAILURE);
}
}

[解决办法]
注意使用调试工具
[解决办法]
分段注释代码,定位错误。
断点调试。

读书人网 >C++

热点推荐