不管条件是否为真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;
您只需将类型 a
和 b
定义为 double 而不是 int.
您的代码中导致 if 语句出现问题的主要错误是整数除法。您必须将操作数转换为双精度数才能执行浮点除法:
cin >> a;
cin >> b;
f = double(a) / double(b);
g = double(b) / double(a);
还有其他问题需要清理,但这是导致您提出问题的问题。
有人可以更正此代码吗?
#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;
您只需将类型 a
和 b
定义为 double 而不是 int.
您的代码中导致 if 语句出现问题的主要错误是整数除法。您必须将操作数转换为双精度数才能执行浮点除法:
cin >> a;
cin >> b;
f = double(a) / double(b);
g = double(b) / double(a);
还有其他问题需要清理,但这是导致您提出问题的问题。