无论条件是否为true,if总是在c++中执行

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

本文关键字:c++ 执行 if 条件 是否 true      更新时间:2023-10-16

有人能纠正这个代码吗。

#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。我在这里错过了什么?

代码中导致if语句出现问题的主要错误是整数除法。您必须将操作数强制转换为双精度才能执行浮点除法:
cin >> a;
cin >> b;
f = double(a) / double(b);
g = double(b) / double(a);

还有其他问题需要解决,但这正是导致你提出问题的原因。

这些表达式虽然分配给双变量,但计算整数除法。

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

也就是说,分配给doubles的是整数值。

if条件基本上检查整数值,因此总是计算为true。

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

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