Как я могу генерировать бесконечные случайные числа пары костей, пока они не равны? - PullRequest
2 голосов
/ 27 марта 2019

Я пытаюсь смоделировать программу, которая будет бросать пару костей, и она будет генерировать результаты, пока переменные не будут равны, однако я не могу понять это.

#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 ]

4 голосов
/ 27 марта 2019

Пара вопросов здесь:

  • ; в конце строки, где начинается оператор while, означает, что while не подключен к блоку кода ниже. Убери это. (если die1 значение равно die2 в самом начале, у вас там будет бесконечный цикл.)

  • Условие для проверки die1 != die2, потому что вы хотите бросить кости, пока они не равны.

См. Демо .

3 голосов
/ 27 марта 2019

В while(die1 == die2);.

есть две ошибки.

== заставляет цикл продолжаться, пока значения равны, но вы хотите обратное.
Условие может быть бесконечным, если два кубика начинаются одинаково (поскольку переброска никогда не происходит, см. Ниже).
Иначе это будет «никогда».
Точка с запятой предотвратит влияние while на следующее {}, оно будет выполнено ровно один раз, если цикл не бесконечен, иначе никогда.

Итак, измените на:

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

Если вы хотите облегчить поддержку и чтение своего кода, изучите информацию о do {} while();.

...