SetDay函数的逻辑错误

时间:2015-10-29 01:04:12

标签: c++

这些是成员函数,其中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));

}

1 个答案:

答案 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:学习使用调试器来逐步执行代码。您没有说出您正在运行的平台,所以我无法告诉您如何操作。但你必须学习如何