Как добавить значения в массив без их сброса в 0 вне цикла for - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь написать код, который добавляет 3 элемента в массив, а затем ищет любые пары. Однако, когда for для l oop заканчивается, массив просто сбрасывается в {0,0,0}. Как «сохранить» значения массива, чтобы они не сбрасывались после выхода из l oop?

    srand(seed);
    const int RANDOMS_NEEDED = 3;
    int rando = 0;
    int rando_max = 10;
    int slotsOutput[3] = {};
    cout << "\t Generating random numbers from 0 to " << rando_max << endl << "\t";

    for (int i = 0; i < RANDOMS_NEEDED; i++) {
        int slotsOutput[3] = {};
        rando = rand();
        int randoInRange = rando % (rando_max + 1);
        cout << "|  " << randoInRange << "  |";
        slotsOutput[i] = randoInRange;
        Sleep(500);
        cout << slotsOutput[i];
        }

Ответы [ 3 ]

1 голос
/ 09 апреля 2020

В for l oop вы отслеживаете вашу предварительно объявленную переменную slotsOutPut.

int slotsOutput[3] = {}; // Declares here

...

for (int i = 0; i < RANDOMS_NEEDED; i++) {
        int slotsOutput[3] = {}; // Declared again, which shadows above slotsOutPut

То, что вы делали, это кратко.

int asdf = 3; // asdf is 3 here
{
    int asdf = 4; // asdf is 4 here, but it's different asdf to above one.
    cout << asdf; // prints 4
} // local variable asdf is gone with the end of the scope.
cout << asdf; // prints 3

Кажется, вам нужно удалить строку int slotsOutput[3] = {}; in for l oop.

0 голосов
/ 09 апреля 2020

Внутри для l oop вы объявляете новый массив slotsOutput с тем же именем, что и переменная вне l oop. Действие внутри l oop влияет только на этот второй массив, который скрывает первый массив с тем же именем. Когда l oop выходит, второй массив исчезает, и у вас есть доступ к первому, который остается неизменным.

Ваш компилятор должен предупредить об этом, если у вас включен соответствующий уровень предупреждения.

0 голосов
/ 09 апреля 2020

Как «сохранить» значения массива, чтобы они не сбрасывались после выхода из l oop?

Вам необходимо удалить код, который сбрасывает массив внутри l oop - это уже должно быть сделано за пределами l oop.

for (int i = 0; i < RANDOMS_NEEDED; i++) {
    int slotsOutput[3] = {};  //<-- remove
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...