Пожалуйста не используйте rand()
и в частности не используйте %
для сокращения до диапазона, поскольку это приводит к неравномерному распределению.
Стандартная библиотека C ++ специально для этого имеет тип uniform_int_distribution
. Используйте это с mt19937 для генерации псевдослучайных чисел:
std::uniform_int_distribution<unsigned> dis(min, max);
std::mt19937 gen(seed);
auto const randomnumber = dis(gen);
В вашем примере вы, вероятно, получите неожиданный диапазон, потому что символ '7'
(например) не равен числу 7
. Возможно, вы захотите использовать character[4]-'0'
в качестве максимального значения.
Когда вы вводите roll10
, это переводится в последнюю ветвь вашего условия, что означает, что у вас есть числовое значение для '1'
плюс числовое значение значение для '0'
, которое равно 48 + 49 = 97. Таким образом, x%97 + 1
учитывает все значения в [1..97] с почти, но не совсем равномерным распределением.
Возможно, вы ищете что-то вроде это:
auto const max = static_cast<unsigned>(command[4]-'0')*10 + static_cast<unsigned>(command[5]-'0');
auto const randomnumber = std::uniform_int_distribution<unsigned>(1, max)(gen);