Miaka Hiraku Ответов: 3

Помогите с моей программой практики


Привет. Кто-нибудь может сказать мне, что я сделал не так? На самом деле я основал код на книге, которую изучаю. Но там нет ни одной цифры каждый раз, когда я запускаю его.

#include <cstdlib>
#include <ctime>
#include <iostream>

using namespace std;

int randRange(int MIN, int MAX);

int main ()
{
    srand( time( NULL ) );

    randRange(15, 20);
}

int randRange(int MIN, int MAX)
{
    while (true) 
    {
        int final_rand = rand();
        if (final_rand>=MIN && final_rand<=MAX)
        {
            return final_rand;
            
        }
    }
}


Что я уже пробовал:

Я попытался поместить "break;" внутри оператора if, но по-прежнему никакого вывода.

3 Ответов

Рейтинг:
22

OriginalGriff

Ну ... это, вероятно, потому, что вы ничего не делаете с ценностью, как только вы ее сгенерировали.
Все, что вы делаете, это вызываете функцию, которая возвращает одно значение , но вы не пытаетесь сохранить его где-либо или вывести его пользователю, и ваше приложение затем закрывается.
Возможно, вы хотите попробовать это вместо этого:

cout << randRange(15, 20);
что могло бы помочь.
Но это не очень поможет, потому что, вероятно, потребуется довольно много времени, чтобы сгенерировать случайное число, которое вписывается в ваш узкий диапазон. rand возвращает значение от 0 до RAND_MAX (которое зависит от системы, но будет не менее 32767).
Если вы посмотрите на определение функции: Рэнд - Справочник по c++ [^] это показывает лучший способ уменьшить диапазон выходов. Поэтому в вашем случае возьмите модуль возвращаемого значения (MAX-MIN), а затем компенсируйте его на MIN, и вам вообще не нужен цикл!


CPallini

5.

Miaka Hiraku

Так вот чего мне не хватает!

Спасибо также за формулу. Попробовал "rand ()%(MAX-MIN)+MIN", и он работает.

OriginalGriff

Пожалуйста!

Рейтинг:
2

Patrice T

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.


Miaka Hiraku

Спасибо Вам за экскурсовода!

Рейтинг:
1

CPallini

И если вы не боитесь использовать C++11 особенности, есть <random></random> заголовок: случайная ссылка на C++ [^]