问题描述
我正在研究使用C ++的编程原理和实践,并且在while语句中遇到了多个“ if”语句的问题。简而言之,我运行以下命令,最终的“ if”语句输出每次迭代,而与输入无关:
int main() {
int i = 0;
double a;
double b;
constexpr double ratio = (1.0/100);
while (i<5) {
cout << "Please enter two doubles\n"
<< "> ";
cin >> a >> b;
if (a > b) {
cout << "The smaller value is " << b << " and the larger value is " << a << ".\n";
}
else if (a < b) {
cout << "The smaller value is " << a << " and the larger value is " << b << ".\n";
}
else if (a == b) {
cout << "The numbers are equal.\n";
}
if (((a-b) < ratio) || ((b-a) < ratio)) {
cout << "Also,the numbers are almost equal.\n";
}
++i;
}
...
但是,如果我将其修改为使用嵌套的“ if”语句,它将按预期工作:
int main() {
int i = 0;
double a;
double b;
constexpr double ratio = (1.0/100);
while (i<5) {
cout << "Please enter two doubles\n"
<< "> ";
cin >> a >> b;
if (a > b) {
cout << "The smaller value is " << b << " and the larger value is " << a << ".\n";
if ((a - b) < ratio) {
cout << "Also,the numbers are almost equal.\n";
}
}
else if (a < b) {
cout << "The smaller value is " << a << " and the larger value is " << b << ".\n";
if ((b - a) < ratio) {
cout << "Also,the numbers are almost equal.\n";
}
}
else if (a == b) {
cout << "The numbers are equal.\n";
}
++i;
}
...
这是怎么回事?我觉得也许我正在失去输入,但是我不知道为什么...
解决方法
比率值为0.01。 A-B或B-A中的任何1个都会导致负值,该值始终小于比率。
if (((a-b) < ratio) || ((b-a) < ratio))
您可能需要将此条件更改为绝对值。
#include <cstdlib> // for abs()function
if (abs(a-b) < ratio)) {
cout << "Also,the numbers are almost equal.\n";
}