Почему я не могу использовать rand () с размером массива? - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь сгенерировать число от 0 до размера массива. Есть мой код, но на выходе всегда 2. Изменить: я пробовал использовать другой компилятор, и на выходе было только 7. Пожалуйста, помогите мне.

Вот мой полный код

#include <iostream>
#include <cmath>
#include <vector>
#include <cstdlib>
#include <string>
#include <ctime>

using namespace std;
int main (){

    string motMystere = ("Bonjour");
    int tailleMotMystere (0);
    vector<string> motMelange;
    tailleMotMystere= motMystere.size();
    srand(time(0));
    int nombreRandom = 0;
    
    nombreRandom = rand() % tailleMotMystere;
    cout << motMystere.size() << endl;
    return 0;
}

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Вы будете получать новое случайное число каждую новую секунду при запуске программы (поскольку вы используете time() для заполнения генератора псевдослучайных чисел), но вы не печатаете случайное число, вы печатаете длину motMystere, поэтому измените

с

cout << motMystere.size() << endl;

на

cout << nombreRandom << endl;

Обратите внимание, что использование srand() и rand() не рекомендуется, начиная с C ++ 11. Используйте новые классы и функции <random>.

Пример:

#include <cstddef>
#include <iostream>
#include <random>
#include <string>

int main (){
    std::mt19937 prng(std::random_device{}()); // A seeded PRNG

    std::string motMystere  = "Bonjour";
    size_t tailleMotMystere = motMystere.size();
    
    // Distribution: [0, tailleMotMystere)
    std::uniform_int_distribution<size_t> dist(0, tailleMotMystere - 1);
    
    size_t nombreRandom = dist(prng);
    std::cout << nombreRandom << '\n';
}
1 голос
/ 12 июля 2020

Ошибка в том, что вы вызываете srand каждый раз перед тем, как позвонить rand()

srand(time(0));
int nombreRandom = 0;

nombreRandom = rand() % tailleMotMystere;

Вместо этого вы должны позвонить srand один раз в начале вашей программы. .

...