Почему при втором срабатывании функции число не делится?

#include <iostream>
using namespace std;

int generateRandBone(){
    int Bone = 0; // какого чёрта на второе срабатывание оно не обнуляет?
    while (true) {
        Bone = rand() % 6;
        if (Bone != 0) {
            break;
            return Bone;
        }
    }
}

int oneBone, twoBone;

int main()
{
    setlocale(LC_CTYPE, "");

    cout << "Кто первый ходит?\n";
    cout << "1) Человек\n";
    cout << "2) Бот\n";
    cout << "3) Рандом\n";
    
    int userInput;

    cin >> userInput;

    if (userInput == 1) {
        while (true)
        {
            oneBone = generateRandBone(); // пытался делить прям во функции, но а второй раз не делилось
            twoBone = generateRandBone();
            cout << "Вы потрясли кости в руке, хотите потрясти ещё или бросить?";
            cout << "1) Потрясти ещё";
            cout << "2) Бросить";
            cin >> userInput;
            if (userInput == 1)
            {
                ;
            }
            else {
                break;
            }
        }
        cout << oneBone;
        switch (oneBone)
        {
        case 1:
            cout << "===========" << endl;
            cout << "|         |" << endl;
            cout << "|         |" << endl;
            cout << "|    *    |" << endl;
            cout << "|         |" << endl;
            cout << "|         |" << endl;
            cout << "===========" << endl;
            break;
        case 2:
            cout << "===========" << endl;
            cout << "|         |" << endl;
            cout << "|    *    |" << endl;
            cout << "|         |" << endl;
            cout << "|    *    |" << endl;
            cout << "|         |" << endl;
            cout << "===========" << endl;
            break;
        case 3:
            cout << "===========" << endl;
            cout << "|         |" << endl;
            cout << "|  *      |" << endl;
            cout << "|    *    |" << endl;
            cout << "|      *  |" << endl;
            cout << "|         |" << endl;
            cout << "===========" << endl;
            break;
        case 4:
            cout << "===========" << endl;
            cout << "|         |" << endl;
            cout << "|  *   *  |" << endl;
            cout << "|         |" << endl;
            cout << "|  *   *  |" << endl;
            cout << "|         |" << endl;
            cout << "===========" << endl;
            break;
        case 5:
            cout << "===========" << endl;
            cout << "|         |" << endl;
            cout << "|  *   *  |" << endl;
            cout << "|    *    |" << endl;
            cout << "|  *   *  |" << endl;
            cout << "|         |" << endl;
            cout << "===========" << endl;
            break;
        case 6:
            cout << "===========" << endl;
            cout << "|         |" << endl;
            cout << "|  *   *  |" << endl;
            cout << "|  *   *  |" << endl;
            cout << "|  *   *  |" << endl;
            cout << "|         |" << endl;
            cout << "===========" << endl;
            break;
        }
    }
}

Почему на вторую генерацию функции он не делится целочисленно на 6?


Ответы (1 шт):

Автор решения: LShadow77
        if (Bone != 0) {
            break;
            return Bone;
        }

Аж по глазам резануло! break тут явно лишний! А вообще, если вам нужно рандомное число от 1 до 6 (насколько можно догадаться), то вы тут нагородили с циклом. Проще гораздо всё:

int generateRandBone(){
    return rand()%6+1;
}

Продолжим...

            if (userInput == 1)
            {
                ;
            }
            else {
                break;
            }

А можно, опять же, проще:

if (userInput != 1) break;

Но корректнее будет всё же перестроить цикл вот так:

while (true)
{
    oneBone = generateRandBone(); 
    twoBone = generateRandBone();
    cout << "Вы потрясли кости в руке, хотите потрясти ещё или бросить?";
    cout << "1) Потрясти ещё";
    cout << "2) Бросить";
    while (true)
    {
        cin >> userInput;
        if ((userInput==1)||(userInput==2)) break;
        cout << "Неверный ввод, повторите ещё раз!" <<endl;
    }
    if (userInput != 1) break;
}
→ Ссылка