我想知道在If-Else语句中true/false值是如何工作的?具体地说,一个提示要求检查某一年是否是闰年。这是我到目前为止所拥有的:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main() {
int inputYear;
bool isLeapYear = false; //the prompt already sets bool isLeapyear = false
cin >> inputYear;
if (inputYear % 400 == 0) {
isLeapYear = true;
}
else if ((inputYear % 4 == 0) && (inputYear % 100 != 0)) {
isLeapYear = true;
}
else {
}
if (isLeapYear) {
cout << inputYear << " is a leap year" << endl;
}
else {
cout << inputYear << " is not a leap year" << endl;
}
return 0;
}
当运行这个语句时,所有的输入都被检查出来,但是我注意到如果布尔变量最初是isLeapYear=false,那么第二个if语句是怎么回事呢
if (isLeapYear) {
如果一个像50这样的输入(显然不是闰年)跳过了所有的if/if-else/else语句,并运行到第二个if语句,并且如果isLeapYear从未被设置为true,因为输入不满足任何条件,那么if语句不会变成if(false)...然后实际上应该输出“50闰年”?
我基本上有正确的代码,但我对逻辑感到困惑,为什么一个不正确/错误的输入不会输出到“是闰年”。
1条答案
按热度按时间qhhrdooz1#
如果一个像50这样的输入(显然不是闰年)跳过了所有的if/if-else/else语句,并运行到第二个if语句,并且如果isLeapYear从未被设置为true,因为输入不满足任何条件,那么if语句不会变成if(false)...
到目前为止一切顺利。只有一个小小的缺点:if/if-else/else没有被“跳过”。条件被评估,它们都是
false
,else
分支被采用(这是一个noop)。你是对的,当
isLeapYear
没有被分配true
时,if (leapYear)
等价于if (false)
。..然后实际上应该输出“50 - leap year”?
这是你的分析中令人困惑的部分。考虑这个更简单的例子:
它能打印
在第一个if语句中,
if (false)
意味着执行else
分支。在第二部分中,我演示了如何使用函数来计算条件并返回结果。作为第一个测试,我的
isLeapYear
总是返回false
。因此,if (isLeapYear())
再次等价于if (false)
,并采用else
分支。