不管条件是否为真if总是在c++中执行

No matter if the condition is true if always executes in c++

有人可以更正此代码吗?

#include <iostream>
using namespace std;

int main()
{
    int a;
    int b;
    int c;
    double d;
    double e;
    double f;
    double g;
    f = a / b;
    g = b / a;
    c = 0;
    cin >> a;
    cin >> b;
    f = a / b;
    g = b / a;
    if (a == b)
    {
        cout << a << endl;
        return 0;
    }
    else if (f == int(f))
    {
        cout << a << endl;
        return 0;
    }
start:
    while (a * b > c)
        c = c + 1;
    d = c / a;
    e = c / b;
    if (d == int(d))
        if (e == int(e))
        {
            cout << c << endl;
            return 0;
        }
        else if (d != int(d))
            goto start;
        else if (e != int(e))
            goto start;
    if (a * b <= c)
        cout << a * b << endl;
}

无论

else if(f==int(f))

代码总是被执行。例如。我输入了 3 和 5,即使 3/5 给出了一个小数,else if 总是被执行并输出 3。我在这里遗漏了什么?

这些表达式虽然赋值给 double 变量,但计算整数除法。

f = a / b;
g = b / a;
d = c / a;
e = c / b;

即分配给双打的是整数值。

您的 if 条件基本上检查整数值,因此始终计算为真。

为了避免整数除法并获得分配给双精度数的实际浮点值,您需要尽早确保编译器相应地解释它们。例如:

f = (1.0*a) / b;
g = (1.0*b) / a;
d = (1.0*c) / a;
e = (1.0*c) / b;

而且,正如评论指出的那样,最好始终初始化所有变量(即使这里 a、b、c 就足够了)。

int a=1;
int b=1;
int c01;
double d=1.0;
double e=1.0;
double f=1.0;
double g=1.0;

您只需将类型 ab 定义为 double 而不是 int.

您的代码中导致 if 语句出现问题的主要错误是整数除法。您必须将操作数转换为双精度数才能执行浮点除法:

cin >> a;
cin >> b;
f = double(a) / double(b);
g = double(b) / double(a);

还有其他问题需要清理,但这是导致您提出问题的问题。