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
处理了这种情况。
我正在为我的大学项目做这个,我的问题是每当我输入这 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
处理了这种情况。