如何生成骰子对的无限随机数,直到它们相等?

时间:2019-03-27 05:30:53

标签: c++ loops random-seed

我正在尝试模拟一个会掷骰子的程序,它将生成结果,直到变量相等为止,但是我无法弄清楚。

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;

int main() { 
    const int MIN_VALUE = 1;
    const int MAX_VALUE = 6;

    int die1,die2;

    unsigned seed = time(0);
    srand(seed);

    die1 = (rand()%(MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;
    die2 = (rand()%(MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;

    while(die1 == die2); {
        die1 = (rand()%(MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;
        die2 = (rand()%(MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;

        cout<<"Value of die 1  is"<<die1<<endl;
        cout<<"Value of die 2 is" <<die2<<endl;
        cout<<endl;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:4)

这里有几个问题:

  • ;语句所在行的末尾的while表示while未连接到下面的代码块。去掉它。 (如果开始时die1的值等于die2,那么它本身将具有无限循环。)

  • 要检查的条件是die1 != die2,因为只要骰子不相等,就想掷骰子。

请参见 Demo

答案 1 :(得分:3)

while(die1 == die2);中有两个错误。

==使循环在值相等时继续进行,但是您想要相反。
如果两个骰子开始相等,则条件可能是无限的(因为重新滚动从未发生,请参见下文)。
否则它将是“从不”。
分号将防止while对随后的{}产生任何影响,如果循环不是无止境的,则分号将只执行一次,否则将永远不会执行。

因此更改为:

while(die1 != die2)
{
    /* reroll */
}

如果您想使代码更易于维护和阅读,请调查do {} while();