c++ 使用布尔变量的If-Else语句

sauutmhj  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(142)

我想知道在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闰年”?
我基本上有正确的代码,但我对逻辑感到困惑,为什么一个不正确/错误的输入不会输出到“是闰年”。

qhhrdooz

qhhrdooz1#

如果一个像50这样的输入(显然不是闰年)跳过了所有的if/if-else/else语句,并运行到第二个if语句,并且如果isLeapYear从未被设置为true,因为输入不满足任何条件,那么if语句不会变成if(false)...
到目前为止一切顺利。只有一个小小的缺点:if/if-else/else没有被“跳过”。条件被评估,它们都是falseelse分支被采用(这是一个noop)。
你是对的,当isLeapYear没有被分配true时,if (leapYear)等价于if (false)
..然后实际上应该输出“50 - leap year”?
这是你的分析中令人困惑的部分。考虑这个更简单的例子:

#include <iostream>

bool isLeapYear() { return false; }

int main() {
    if (false) { std::cout << "this is not printed"; } 
    else { std::cout << "Hello ";}

    if (isLeapYear()) { std::cout << "this is not printed"; }
    else { std::cout << "leap year!";}
}

它能打印

Hello leap year!

在第一个if语句中,if (false)意味着执行else分支。
在第二部分中,我演示了如何使用函数来计算条件并返回结果。作为第一个测试,我的isLeapYear总是返回false。因此,if (isLeapYear())再次等价于if (false),并采用else分支。

相关问题