使用嵌套 if 语句的意外结果

Unexpected result using nested if statements

本文关键字:意外 结果 语句 if 嵌套      更新时间:2023-10-16

这是我到目前为止编码的内容:

#include <iostream>
using namespace std;
int main()
{
int num;
cout << "Enter a month(as a number): ";
cin >> num;
if (num < 3 || num > 11)
{
cout << "Happy Wintern";
}
else if (num > 7 || num < 9)
{
cout << "Happy Summern";
}
else if (num > 3 || num < 7)
{
cout << "Happy Springn";
}
else
{
cout << "Happy Falln";
}
return 0;
}

我的程序没有按照应有的方式打印内容。我的程序应该打印: "冬天快乐"如果严格在 3 之前或严格大于 11, "快乐春天",如果它是3或更大,但严格在7之前,并且 "快乐的夏天",如果它是7或更大,但严格在9之前,并且 否则"秋天快乐"。

但出于某种原因,无论我输入什么数字,它都只打印"夏日快乐"。 唯一有效的行是我编码的第一个 if 语句。我不确定我做错了什么,但我认为这与我在 else if 语句中的操作有关。

再看看这个,如果数字小于 9 或大于 7,这是真的:

(num > 7 || num < 9)

这都是数字。

您应该使用 and(&&( 代替,您的(num > 3 || num < 7)也是如此。

另请注意,您的if语句遗漏了 3,因此它被归类为秋季。这很容易被忽略,因为您只严格使用小于和大于,而不是小于/大于或等于。

也许看看这个:

if (num >= 3 && num <= 5) {
cout << "Happy Springn";
} else if (num >= 6 && num <= 8) {
cout << "Happy Summern";
} else if (num >= 9 && num <= 11) {
cout << "Happy Falln";
} else {
cout << "Happy Wintern";
}

这专门针对第 3-5 个月,然后是 6-8 个月,然后是 9-11 个月,然后是其余月份。

您还应该考虑阅读为什么"使用命名空间 std"被认为是不好的做法?