Проблемы с srand (), C ++ - PullRequest
       1

Проблемы с srand (), C ++

0 голосов
/ 12 ноября 2010

Я пытаюсь написать программу, которая генерирует псевдослучайные числа, используя начальное число. Однако я сталкиваюсь с проблемами.

Я получаю эту ошибку

39 C:\Dev-Cpp\srand_prg.cpp void value not ignored as it ought to be 

Используя этот код

#include <iostream>
#include <iomanip>
#include <sstream> 
#include <limits>
#include <stdio.h>

using namespace std ;

int main(){
    int rand_int;
    string close ;

    close == "y" ;

    cout << endl << endl ;
    cout << "\t ___________________________________" << endl ;
    cout << "\t|                                   |" << endl ;
    cout << "\t|   Pseudorandom Number Game!       |" << endl ;
    cout << "\t|___________________________________|" << endl ;
    cout << endl << endl ;

    while ( close != "y" ){

        rand_int = srand(9);
        cout << rand_int << endl ;

        cout << "  Do you wish to exit the program? [y/n]     " ;
        cin >> close ; }

}

Ответы [ 5 ]

7 голосов
/ 12 ноября 2010

srand не возвращает случайное число, оно просто перезапускает генератор случайных чисел. Позвоните rand впоследствии, чтобы получить номер:

srand(9);
rand_int = rand();
4 голосов
/ 12 ноября 2010

srand () генерирует начальное число (число, используемое для инициализации генератора случайных чисел) и должно вызываться один раз для каждого процесса.rand () - это функция, которую вы ищете.

Если вы не знаете, какое семя выбрать, используйте текущее время:

srand(static_cast<unsigned int>(time(0))); // include <ctime> to use time()
3 голосов
/ 12 ноября 2010

Назовите это так.

srand(9);
rand_int = rand();
1 голос
/ 12 ноября 2010

Вы используете srand неправильно, эта конкретная функция предназначена для установки начального числа для последующих вызовов на rand.

Основная идея состоит в том, чтобы вызвать srand один раз с неопределенным начальным числом, а затем непрерывно вызывать rand, чтобы получить последовательность чисел. Что-то вроде:

srand (time (0));
for (int i = 0; i < 10; i++)
    cout << (rand() % 10);

, что должно дать вам случайные числа от 0 до 9 включительно.

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

Так что ваш конкретный цикл while будет больше похож на:

srand (9); // or use time(0) for different sequence each time.
while (close != "y") {  // for 1 thru 9 inclusive.
    rand_int = rand() % 9 + 1;
    cout << rand_int << endl;

    cout << "Do you wish to exit the program? [y/n]? ";
    cin >> close;
}
1 голос
/ 12 ноября 2010

srand возвращает функцию void и не возвращает значение.

Здесь вы можете узнать больше об этом.Вам просто нужно вызвать srand (9) и получить значение rand () после этого, как указывалось в J-16 SDiZ, за которого проголосуют :):

...