2015-05-10 4 views
-1

Мне нужно создать случайное целое число в пределах определенного пользователем диапазона. Он должен использовать одну переменную для хранения результата вызова функции и просто обновлять переменную при каждом вызове.Необходимо создать случайное целое число в пределах заданного диапазона

Функция, которая использует вход для генерации случайных чисел:

int genRandInt (int smallnum, int bignum) { 
    int randnum = smallnum + (rand() % (bignum - smallnum + 1)); 

    return randnum; 
} 

Основная функция:

int main() 
{ 
    srand(time(NULL)); 
    int smallnum; 
    int bignum; 
    int z = genRandInt(smallnum, bignum); 

    cout << "Enter the smallest possible number: "; 
    cin >> smallnum; 

    cout << "Enter the biggest possible number: "; 
    cin >> bignum; 

    genRandInt(smallnum, bignum); 
    cout << "Random number: " << z << endl; 

    genRandInt(smallnum, bignum); 
    cout << "Random number: " << z << endl; 

    genRandInt(smallnum, bignum); 
    cout << "Random number: " << z << endl; 

    return 0; 
} 

Программа работает, но он продолжает возвращаться три из того же числа, ни один из которых находятся в пользовательском диапазоне. Например, для выполнения каждого вызова функции диапазон 10 и 100 возвращает 267499385.

Какие-нибудь идеи, что здесь не так? Я очень ржавый.

EDIT: Заменено первоначальное определение int z = genRandInt(smallnum, bignum);int z;. Затем я заменил три вызова функций на z = genRandInt(smallnum, bignum);, и теперь он работает нормально. Это правильно? Или есть лучший способ сделать это?

EDIT2: Кажется, что это хороший способ сделать это. Всем спасибо.

ответ

3

Причина это не меняет в том, что у вас есть это:

genRandInt(smallnum, bignum); 

три раза. Измените его на это в каждом случае:

z = genRandInt(smallnum, bignum); 

Это сохранит результат в вашей переменной.

Причина, по которой ваш результат за пределами допустимого диапазона заключается в том, что ни smallnum, ни bignum не были определены, когда вы позвонили genRandInt в первый раз. Поскольку вы назначили , что результат z и никогда не менял его, то это ваша проблема.

+0

Заменено первоначальное определение 'int z = genRandInt (smallnum, bignum);' с 'int z;'. Затем я заменил три вызова функций на 'z = genRandInt (smallnum, bignum);' и теперь он работает нормально. Это правильно? Или есть лучший способ сделать это? –

0

Вы присвоить значение z без первой инициализации smallnum и bignum:

int smallnum; 
int bignum; 
int z = genRandInt(smallnum, bignum); 

Тогда ваши дальнейшие призывы к genRandInt() фактически не присвоить результат z, и поэтому ваш код выводит исходное значение вредного из первый звонок.

+0

Заменено первоначальное определение 'int z = genRandInt (smallnum, bignum);' с 'int z;'. Затем я заменил три вызова функций на 'z = genRandInt (smallnum, bignum);' и теперь он работает нормально. Это правильно? Или есть лучший способ сделать это? –

+0

@CodyHayes: Да, это, безусловно, один хороший способ сделать это. Для такой простой программы там действительно не так много возможностей для улучшения. –

0

Вы не обновляете z. Он просто устанавливается на возвращаемое значение вашей функции.

Смежные вопросы