Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
#1

Rand() выходит за диапазон - C++

27.07.2014, 11:33. Просмотров 275. Ответов 5
Метки нет (Все метки)

Две функции:

C++
1
2
3
4
5
6
7
8
9
10
11
inline void Playing_card::set_random_suit()
{
    std::srand(time(NULL));
    suit_ = Card_suit(rand() % spades + clubs); // spades(enum)=4, clubs(enum) = 1
}
 
inline void Playing_card::set_random_value()
{
    std::srand(time(NULL));
    value_ = rand() % d_.range[1] + d_.range[0]; //d_range - массив int
}
Первая функция всегда выводит значение в диапазоне от [clubs; spades], а последняя функция должна возвращать значение от 2(6) до 13, но почему то значения всегда выходят за пределы 13! d_range[0] равен 2 или 6, а d_range[1] всегда равен 13.
В чем проблема?
Миниатюры
Rand() выходит за диапазон  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2014, 11:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Rand() выходит за диапазон (C++):

Как увеличить диапазон rand()? - C++
нужно заполнить оочень большой массив оочень большими числами. нигде не нашел ответа на этот вопрос. rand()%+любое число больше 32767 не...

Как задать диапазон rand - C++
Как задать диапазон rand например от 3 до -5?

Диапазон отрицательных чисел. Функция rand() - C++
Как задать диапазон случайных чисел чтобы в него входили как положительные так иотрицательные числа к примеру от -100 до 100?

Как задать диапазон с помощью функции rand? - C++
В задаче говорится "Дан массив целых чисел (размер – случайное число из диапазона )". Как задать диапазон с помощью функции...

Вектор выходит за диапазон - C++
Здравствуйте. :) Как сделать так чтобы вектор не выходил за диапазон? #include <iostream> #include <vector> using namespace std; ...

rand от 1 до 16 - C++
Вопрос в том как в функции rand() на c++ задать диапазон чисел от 1 до 16

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vlad0922
29 / 23 / 4
Регистрация: 20.11.2013
Сообщений: 65
27.07.2014, 11:43 #2
Но последняя функция у вас может вернуть более 13.
Пусть
C++
1
rand() % d_.range[1]
Вернет 10, а в d_.range[0] хранится 6.
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
27.07.2014, 11:48  [ТС] #3
Изменил строку вот так, теперь работает.
C++
1
value_ = rand() % (d_.range[1]-d_.range[0]) + d_.range[0];
zss
Модератор
Эксперт С++
6366 / 5930 / 1923
Регистрация: 18.12.2011
Сообщений: 15,239
Завершенные тесты: 1
27.07.2014, 11:50 #4
Уиверсальная формула получения числа в диапазоне [a,b]
C++
1
double x=((double)rand()/RAND_MAX)*(b-a)+a;
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
27.07.2014, 11:58  [ТС] #5
zss, а если тип не double? просто заменить все double на другой тип?
zss
Модератор
Эксперт С++
6366 / 5930 / 1923
Регистрация: 18.12.2011
Сообщений: 15,239
Завершенные тесты: 1
27.07.2014, 12:33 #6
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
если тип не double
Советую вычислить в double, а потом привести к нужному типу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2014, 12:33
Привет! Вот еще темы с ответами:

rand()%(-20)%(20); - C++
Нужно сорт случ числа от -20 до 20 Делаю так rand()%(-20)%(20); получаю числа от 0 до 20, а мне нужно от -20 ;

rand - C++
всем привет) что означает вот это строка double value = (rand()%1000)/100.0 - 5.0; и чем она отличается от этой double value =...

rand() - C++
генератор случайных чисел rand() подскажите пожелуста как работает ета штука. что означает %200, %200-100. какой принцип роботы

Rand() - C++
metka: r1=rand()%2; r2=rand()%2; if(r1==a && r2==b)goto metka; else arr=='O'; Собсно-это кусок кода...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.07.2014, 12:33
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru