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

时间:2017-11-26 21:37:59

标签: c++ random while-loop numbers do-while

我有两个不同的代码,对我来说看起来一样,但它们不是。第一个按我的意愿工作,第二个没有。我不明白为什么。

$base = new PDO('oci:host=localhost;dbname=Schema - HR', 'hr','hr');

$base = new PDO("oci:host=localhost;dbname=Schema - HR", "hr","hr");

$base = new PDO("oci:host=localhost/XE;dbname=Schema - HR", "hr","hr");

$base = new PDO("oci:host=XE;dbname=Schema - HR", "hr","hr");

$base = new PDO('oci:host=localhost;dbname="Schema - HR"', 'hr','hr');

这是第二个。据我了解,do-while循环应该运行,直到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)));

}

2 个答案:

答案 0 :(得分:4)

问题在于: while(((num1==1)&&(num2==2)&&(num3==3))); 当所有这三个与您打印的值不同时,while循环将结束。另外,我强烈建议学习bool算法,尤其是De Morgan's Law

!(A&amp;&amp; B)=!A || !B!(A || B)=!A&amp;&amp; !B所以

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

将转换为

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

答案 1 :(得分:0)

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

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));

是不同的。

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