我希望循环运行直到数字为:123

I want the loop running until numbers are: 123

本文关键字:数字 循环 运行 我希望      更新时间:2023-10-16

我有2个不同的代码,对我来说看起来相同,但事实并非如此。第一个按照我的意愿起作用,第二个不做。我不明白为什么。

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
    int num1, num2, num3, i=0;
    srand(time(0));
    do{
    i++;
    num1=rand()%3+1;
    num2=rand()%3+1;
    num3=rand()%3+1;
    cout<<i<<"."<<num1<<num2<<num3<<endl;
    }while(!((num1==1)&&(num2==2)&&(num3==3)));
}

这是第二个。据我所知,do-wher lile循环应运行,直到num1不等于1,num2不等于2,num3不等于3。

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
    int num1, num2, num3, i=0;
    srand(time(0));
    do{
    i++;
    num1=rand()%3+1;
    num2=rand()%3+1;
    num3=rand()%3+1;
    cout<<i<<"."<<num1<<num2<<num3<<endl;
    }while((num1!=1)&&(num2!=2)&&(num3!=3));
}

问题在这里: while(((num1==1)&&(num2==2)&&(num3==3)));当这三个都与您打印的值不同时,循环将结束。我也强烈建议学习布尔算术,尤其是德·摩根定律

!(a&amp;&amp; b)=!a ||!b!(a || b)=!a&amp;&amp;!b so

!((num1==1)&&(num2==2)&&(num3==3))

将转换为

(!(num1==1)||!(num2==2)||!(num3==3))

两个代码之间的区别是,第一个代码将迭代直到所有三个变量符合其各自的条件,但是第二个代码将持续到至少一个变量符合其状况。这就是使用布尔逻辑评估时出现的方式。如果您想在不使用开始的情况下纠正第二个条件!,则可以将条件更改为:

while((num1 != 1) || (num2 != 2) || (num3 != 3));

在第一个程序中的do-语句中的条件

while(!((num1==1)&&(num2==2)&&(num3==3)));

可以等效地转换为

while( (num1!=1) || (num2!=2) || (num3 != 3)));

这意味着其中一个变量中的一个不等于1或2或3。

第二个程序中的do-while语句中的条件

}while((num1!=1)&&(num2!=2)&&(num3!=3));

表示NUM1不等于1,NUM2不等于2,NUM3不等于3。

很明显条件

while( (num1!=1) or (num2!=2) or (num3 != 3)));

}while( (num1!=1) and (num2!=2) and (num3!=3));

不同。

因此,程序的行为不同。:)