C ++单独的“ if”语句不起作用,但嵌套的“ if”语句却起作用

问题描述

我正在研究使用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";
}