即使条件不满足,C“ for”循环仍在继续

时间:2020-06-05 17:11:49

标签: c for-loop

我在C语言中有一个简单的函数,可以计算两个给定日期之间的天数。

当两个日期都有效时,它会很好地工作。 如果日期无效,则将日期设置为“ 0/0/0”。

这是我的for循环之一:

for(int i = 0; i < date2.month - 1; i++)
    d2Days += monthDays[i];

如果日期无效,则date2.month等于0,并且循环根本不会重复,但是循环会重复,并且会无限期地进行下去,直到i超过数组的大小并且会断断续续。

enter image description here

即使月份= 0,您也可以看到i = 13

有人可以解释为什么这样的行为吗?

1 个答案:

答案 0 :(得分:0)

我认为@pmg在上面的评论中添加了它。如果您的date2.month成员是无符号的,则将其设置为零时,在循环中将其递减1会导致整数溢出并返回INT_MAX。发生这种情况时,您的循环条件将评估为true,直到您超出monthDays

的范围