if 和 else if 语句的错误

a bug with if and else if statement

我正在为我的大学项目做这个,我的问题是每当我输入这 3 个特定输入时:98、95、96;它将输出 96.33333,并且永远不会输出等效等级线。对不起,我只是一个初学者,我对编码术语还不熟悉。谁能帮我解决这个错误?我将不胜感激。先谢谢你了!

#include <iostream>

using namespace std;

int main()
{
    double prelim = 0.0;
    double midterm = 0.0;
    double finals = 0.0;
    double gen = 0.0;
    double equiv = 0.0;

    cout << "Enter Prelim Grade : ";
    cin >> prelim;
    cout << "Enter Midterm Grade : ";
    cin >> midterm;
    cout << "Enter Finals Grade : ";
    cin >> finals;
    cout << endl;

    gen = (prelim + midterm + finals) / 3;

    cout << "Your General Average is: " << gen << endl;

    if (gen <= 100 && gen >= 97)
    {
        cout << "Equivalent Grade is: 1.0";
    }
    else if (gen <= 96 && gen >= 94)
    {
        cout << "Equivalent Grade is: 1.25";
    }
    else if (gen <= 93 && gen >= 91)
    {
        cout << "Equivalent Grade is: 1.50";
    }
    else if (gen <= 90 && gen >= 88)
    {
        cout << "Equivalent Grade is: 1.75";
    }
    else if (gen <= 87 && gen >= 85)
    {
        cout << "Equivalent Grade is: 2.0";
    }
    else if (gen <= 84 && gen >= 82)
    {
        cout << "Equivalent Grade is: 2.25";
    }
    else if (gen <= 81 && gen >= 79)
    {
        cout << "Equivalent Grade is: 2.50";
    }
    else if (gen <= 78 && gen >= 76)
    {
        cout << "Equivalent Grade is: 2.75";
    }
    else if (gen == 75)
    {
        cout << "Equivalent Grade is: 3.0";
    }
    else if (gen < 75)
    {
        cout << "Equivalent Grade is: 5.0";
    }


    return 0;
}

在这一行

if (gen <= 100 && gen >= 97)
    {
        cout << "Equivalent Grade is: 1.0";
    }
    else if (gen <= 96 && gen >= 94)
    {
        cout << "Equivalent Grade is: 1.25";
    }

你检查它是否小于或等于 100 且大于或等于 97。然后你检查它是否小于或等于 96 或大于或等于 94。你没有任何 if 语句在 96 和 97 之间进行检查,因此它不会打印任何内容。要解决此问题,您可以这样做

if (gen <= 100 && gen > 96)
    {
        cout << "Equivalent Grade is: 1.0";
    }
    else if (gen <= 96 && gen >= 94)
    {
        cout << "Equivalent Grade is: 1.25";
    }

if (gen <= 100 && gen >= 97)
    {
        cout << "Equivalent Grade is: 1.0";
    }
    else if (gen < 97 && gen >= 94)
    {
        cout << "Equivalent Grade is: 1.25";
    }

第一个条件都不是

if(gen <= 100 && gen >= 97)

也不是第二个

else if (gen <= 96 && gen >= 94)

在此处申请。具体来说,96.333 既不是 >= 97 也不是 <= 96,而是介于两者之间。

一个简单的解决方案是四舍五入 gen:

gen = std::round(gen);

在你的 if 语句中你有漏洞,在你的例子 98, 96, 95 gen = 96.33 和你的 if 语句中有: if (gen <= 100 && gen >= 97) 代码将跳过这个 if 语句并进入 else 分支: else if (gen <= 96 && gen >= 94),你的代码也会跳过它,它不识别 96 和 97 之间的数字。 解决方案是您想要更改 if 语句或在 if 语句之前舍入数字,您可以使用函数 round(x);其中 x 是您要舍入的数字,此函数来自库 cmath (#include <cmath>) 有关此功能的更多信息,我建议阅读这篇文章: https://www.programiz.com/cpp-programming/library-function/cmath/round

检查一个值在哪个范围内的通常方法是在每个 if 分支中只有一个条件。这样你就不会编写冗余代码。

if (gen > 100) something_is_wrong();
else if (gen >= 97) do_something_with_top_range();
else if (gen >= 94) do_something_with_next_range();
... // et cetera

else if (gen >=94)中不需要测试gen是否小于97;如果 gen 超出该范围,代码将不会到达 else if 语句,因为前面的 else if 处理了这种情况。