这些是成员函数,其中mm,dd和yy是唯一的数据成员。由于某种原因,当我运行它时,第一个对象是好的,但然后在第二个对象上它返回false。并继续询问用户输入。我确信我对setDay的验证有问题,因为它要求用户继续输入值,尽管值是有效的。有关如何修复它的任何建议吗?
// setDay函数 bool Date :: setDay(int d){
bool validate = false;
int monthsPerYear = 12;
int date[monthsPerYear] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
for ( int i = 1; i <= 12; i++){
if ( mm == monthsPerYear && d <= date[i]){
dd = d;
validate = true;
}
}
return(validate);
}
//输入成员函数
void Date :: input(){
int m, y, d;
do{
cout << "Enter month: ";
cin >> m;
mm = m;
} while(!setMonth(m));
do{
cout << "Enter date: ";
cin >> d;
dd = d;
} while (!setDay(d));
do{
cout << "Enter year: ";
cin >> y;
yy = y;
} while (!setYear(y));
}
答案 0 :(得分:0)
您是否阅读了自己的代码: - )
bool validate = false;
int monthsPerYear = 12;
int date[monthsPerYear] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
for ( int i = 1; i <= 12; i++){
if ( mm == monthsPerYear && d <= date[i]){
dd = d;
validate = true;
}
}
它只接受第12个月的日期mm == monthsPerYear &&
此外,您应该从0到11循环而不是1到12.计算机aray索引从0开始。
但你不需要循环。你的代码应该只读
if(d <= date[mm]){
dd=d;
validate = true;
}
PS:学习使用调试器来逐步执行代码。您没有说出您正在运行的平台,所以我无法告诉您如何操作。但你必须学习如何