C ++ rand () возвращает бессмысленные значения при первом запуске, отлично работает при втором - PullRequest
0 голосов
/ 01 марта 2020

Я нахожусь в процессе создания программы лотереи, и это моя функция рандомизации

#include <iostream>
#include <stdlib.h>
#include <time.h>// for seeding srand
#include <algorithm> //for std::find
#include <iterator> //for std::begin, std::end

using namespace std;

void rivinArvonta(int arvottuRivi[]){   
    int rivi[7];
    int pallo = 41;
    srand(time(NULL));

    for (int i = 0; i < 7; i++) {
            pallo = rand() % 40 + 1;
            bool exists = (find(begin(rivi), end(rivi), pallo) != end(rivi));
            if (exists == false) {
                    rivi[i] = pallo;
            }else
                    i = i - 1;
    }
    sort(rivi, rivi + 7);


    for (int i = 0; i < 7; i++){
        arvottuRivi[i] = rivi[i];
    }
}

Программа работает некоторое время l oop, пока я не скажу ей остановиться. Когда я в первый раз вызываю эту функцию, она возвращает что-то вроде:

 5, 0, -164820691, 21983, 0, 0, -164820768

Во второй раз, когда я вызываю функцию, она работает так, как задумано.

Я не понимаю, как pallo = rand() % 40 + 1; может вернуть что-то так много за пределы? Может ли это быть потому, что я использую g ++?

PS извините за то, что мои имена переменных в finni sh.

1 Ответ

0 голосов
/ 02 марта 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...