我正在编写一个带有Date类对象的程序。当我将班级日期打印到屏幕上时,有三个选项默认(M / D / Y),长(月,日年)和两位数字(mm / dd / yy)。我已经解决了每个选项的代码,但是在调用SetFormat()函数时无法更改格式。我希望SetFormat的默认参数为'D',以便在没有指定参数的情况下,它处于“默认”形式,但是在主菜单中调用SetFormat()时,它将切换形式。
这是我的.cpp文件的一部分:
void Date::Show()
{
if (SetFormat('D'))
{
cout << month << '/' << day << '/' << year;
}
if (SetFormat('T'))
{
if(month < 10){
cout << 0 << month << '/';
}else
cout << month << '/';
if (day < 10) {
cout << 0 << day << '/' << (year % 100);
} else
cout << day << '/' << (year % 100);
}
if (SetFormat('L'))
{
LongMonth();
cout << " " << day << ", " << year;
}
}
bool Date::SetFormat(char f)
{
format = f;
if (f == 'T')
return true;
if (f == 'D')
return true;
if (f == 'L')
return true;
else
return false;
}
这是我的.h文件的一部分:
class Date{
public:
explicit Date(int m = 1, int d = 1, int y = 2000);
void Input();
void Show();
bool Set(int m, int d, int y);
bool SetFormat(char f = 'D');
该程序现在只是忽略了我的'if'语句,当我在主程序中调用函数SetFormat()时,它会以背对背的方式打印所有3种格式。
答案 0 :(得分:1)
SetFormat(char)函数为每个选项返回true,因此它将依次打印每个选项。
答案 1 :(得分:1)
问题是您同时将SetFormat()
既用作“设置”功能又用作“获取”功能。我建议有两个功能。
void SetFormat(char f);
char GetFormat() const;
并正确使用它们。
在Date::Show()
中,使用GetFormat()
或仅使用成员变量的值。
在main
中,使用SetFormat()
。
void Date::Show()
{
// Need only one of the two below.
// char f = GetFormat();
char f = format;
if (f == 'D')
{
cout << month << '/' << day << '/' << year;
}
else if (f == 'T')
{
if(month < 10){
cout << 0 << month << '/';
}else
cout << month << '/';
if (day < 10) {
cout << 0 << day << '/' << (year % 100);
} else
cout << day << '/' << (year % 100);
}
else if ( f == 'L')
{
LongMonth();
cout << " " << day << ", " << year;
}
}
void Date::SetFormat(char f)
{
format = f;
}
char Date::GetFormat() const
{
return format;
}
和main
中的
Date date;
date.SetFormat('L');
date.Show();
当然,您应该检入SetFormat()
和Show()
以确保格式有效,如果不是这种情况,请执行某些操作。