Rick York
Как уже упоминалось, вызов srand должен быть перемещен из этой функции в main, поэтому он вызывается один раз.
У вас также есть проблема с тем, как вы используете возврат из rand(). Вы заявили, что вам нужны случайные значения от 0 до 4. Функция возвращает случайные значения от 0 до RAND_MAX с типичным значением 32K. Вы добавляете единицу к результату возврата по модулю 4. Это означает, что значения будут варьироваться от 1 до 4. Вот функция, которая будет возвращать значения в указанном диапазоне.
int GetRandomValue( int minval, int maxval )
{
int range = maxval - minval + 1;
int rval = rand() % range;
return rval + minval;
}
Вам нужны числа в диапазоне от 0 до 4, поэтому вызовите эту функцию и передайте ей значения 0 и 4.
Вот код, который будет тестировать эту функцию :
void DoRandomValueTest()
{
std::vector< int > values( 10, 0 );
const int count = 1000;
for( int n = 0; n < count; ++n )
{
int rv = GetRandomValue( 1, 8 );
values[ rv ] += 1;
}
size_t valueCount = values.size();
trace( _T( "random value vector has %d items\n" ), (int) valueCount );
for( size_t i = 0; i < valueCount; ++i )
trace( _T( "%2d : %4d times\n" ), (int) i, values[ i ] );
}
Вот результат теста :
21:04:02.279 TestThread_07 random value vector has 10 items
21:04:02.279 TestThread_07 0 : 0 times
21:04:02.279 TestThread_07 1 : 129 times
21:04:02.279 TestThread_07 2 : 143 times
21:04:02.279 TestThread_07 3 : 116 times
21:04:02.279 TestThread_07 4 : 113 times
21:04:02.279 TestThread_07 5 : 119 times
21:04:02.279 TestThread_07 6 : 135 times
21:04:02.279 TestThread_07 7 : 129 times
21:04:02.279 TestThread_07 8 : 116 times
21:04:02.279 TestThread_07 9 : 0 times
Как видите, все значения находятся в диапазоне от 1 до 8. Распределение достаточно плоское для такого небольшого диапазона.