#include <iostream>
using namespace std;
int main(){
int a;
int b;
int dif;
cout<<"insert a: "<<endl;
cin>>a;
cout<<"insert b: "<<endl;
cin>>b;
if(a>b){
while(dif>=3){
dif=a-b;
cout<<dif;
}
}else{
while(dif>=3){
dif=b-a;
cout<<dif;
}
}
}
这应该是一个程序,它读取两个数字,并不断地从较大的数字中减去较小的数字,直到差值为<; 3个单位。 当它这样做时,它还应该在每次迭代时输出差异,但由于某种原因,它会将差异发送到垃圾邮件中,或者不输出任何内容。 帮忙?
while循环中存在两个问题:
while(dif>=3){
dif=a-b;
cout<<dif;
}
首先,dif
是未初始化使用的,使用它将导致未定义的行为。 修复后,循环仍然不能执行您想要的操作。
dif=a-b;
将在每次迭代中为dif
分配相同的值,因此循环将从不运行(在循环之前条件是false
),一次运行(在赋值之后条件是false
),或者永远运行(赋值之后条件仍然是true
)。 我想这不是你想要的行为。
。。。然后不断地从较大的一个中减去较小的一个,直到差值<<; 3个单位。
实际上你忘了从一个数字减去另一个数字。 这将是(如果a
较大):
while ( a-b >= 3) a -= b;
或者使用一个额外的变量(我认为它没有帮助,反而增加了复杂性):
int diff = a-b;
while (diff >= 3) {
a -= b;
diff = a-b;
}
您需要将dif初始化为一个数字,例如int dif=0;
。 C++没有说明当你操作或使用一个未初始化的变量时会发生什么,所以任何事情都可能发生,而你的程序将不能始终如一地工作--这可能就是为什么你没有让它产生任何输出的原因。 这种现象被称为未定义行为--请参阅此处以获得完整的解释。
此外,循环也是无限的--如果a
大于b
,dif>=3
,并且您设置了dif=a-b
,则dif
总是相同的,因此条件将始终为真,因此您的代码永远不会停止运行。 您需要先减去并重新分配变量,以便值发生更改,然后更新dif
:
a = a - b
dif = a - b
第二个循环也有同样的问题。
这里有两个问题。
diff=abs(b-a)
diff=abs(b-a)
祝你好运