提问者:小点点

程序一直在滥发号码?


#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个单位。 当它这样做时,它还应该在每次迭代时输出差异,但由于某种原因,它会将差异发送到垃圾邮件中,或者不输出任何内容。 帮忙?


共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大于bdif>=3,并且您设置了dif=a-b,则dif总是相同的,因此条件将始终为真,因此您的代码永远不会停止运行。 您需要先减去并重新分配变量,以便值发生更改,然后更新dif:

a = a - b
dif = a - b

第二个循环也有同样的问题。

匿名用户

这里有两个问题。

  1. diff没有被分配任何默认值,因此它获得随机值,如果它大于或等于3,它将打印无穷大,如果它小于3,它将不执行任何操作。 用diff=abs(b-a)
  2. 初始化diff
  3. 如果diff偶然进入循环,那么在每次迭代中,diff不会改变,因为a和b保持不变。 因此更改逻辑。
  4. 而不是if else和两个while循环只使用diff=abs(b-a)

祝你好运