程序的意外行为

时间:2015-10-31 06:33:57

标签: c++

我需要根据' d yyyy'中给出的2个输入日期执行以下计算。格式

1. if year_date1 > year_date2              // output 10000
2. else if month_date1 > month_date2       // output diff_month * 500
3. else if day_date1 > day_date2           // output diff_day * 15
4. else                                    // output 0

e.g。
输入 -

2 7 1014         // date1
1 1 1015         // date2

输出

0
  

但是对于同样的输入案例,为什么我会得到' 3000'而不是' 0'?

int main(){    
    int dif_day,dif_month,dif_year;
    int day[2],month[2],year[2];

    for(int i = 0; i < 2; i++) 
      cin >> day[i] >> month[i] >> year[i];

    dif_day = day[0] - day[1];
    dif_month = month[0] - month[1];
    dif_year = year[0] - year[1];

    if(dif_year > 0){
      cout << 10000;
    }
    else if(dif_month > 0){
      cout << dif_month * 500;
    }
    else if(dif_day > 0){
      cout << dif_day * 15;
    }
    else 
      cout << 0;

    return 0;
}

2 个答案:

答案 0 :(得分:0)

您的代码会减去yearmonthdate并进行一些适当的计算。

在您的示例中,dif_year-1,因此

if(dif_year > 0)

不成立。然后dif_month出现在6.下一个条件是

if (dif_month > 0) // dif_month == 6
  cout << dif_month*500 // 6*500 = 3000

这解释了观察输出的原因。

答案 1 :(得分:0)

dif_year不大于0而是-1,所以程序转到第一个else if语句,其中dif_month大于0(6)并执行6 * 500,即3000并输出。其余的else语句都被跳过了。

要获得0,第一个日期的所有数字都必须小于第二个日期的数字。例如,1 1 1014 2 7 1015将输出0。

非常期待该计划的行为。