无论条件是否为true,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。我在这里错过了什么?
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;
您只需要将类型a
和b
定义为double而不是int。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 将执行、作业和WinAPI相乘
- 对字符数组中的元素执行逐位操作
- 为什么g++在未执行的代码处标记强制转换错误
- 如何使用原子指针执行双缓冲