#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)运行。我想这不是预期的行为。

您实际上忘记了从另一个数中减去一个数。那将是(如果a更大):
while ( a-b >= 3) a -= b;
或带有其他变量(我认为这没有帮助,但会增加复杂性):
int diff = a-b;
while (diff >= 3) {
    a -= b;
    diff = a-b;
}

09-07 08:10