Как я могу установить мою переменную в C ++ на 0 и предотвратить ее случайное получение? - PullRequest
0 голосов
/ 23 января 2019

Я новичок в программировании. Я делал несколько простых приложений. Я уже закончил свою программу, когда понял, что моя переменная становится случайной, даже если я установил ее на 0. Я пытался выяснить, почему. Моя цель - добавить 1 в переменную "cor", когда ответ совпадает со случайно сгенерированным числом, раздел "else" работает так, как должен. Может быть, кто-то более опытный может помочь мне.

`

#include <iostream>
#include <string>
#include <time.h>
#include <Windows.h>

using namespace std;

int number;
int ynumber[5];
int cor = 0;
int falsed = 0;

int main()
{
    cout << "Welcome to our lottery!" << endl; 

    cout << "We start in ..." << endl;
    Sleep(2000);


    for (int i = 3; i >= 0; i--)
    {
        system("cls");
        cout << i << endl;
        Sleep(1000);
    }

    system("cls");
    srand(time(NULL));

    for (int i = 0; i < 6; i++)
    {
        cout << "Type your " << i+1 << " number below" << endl;
        cin >> ynumber[i];

        number = rand() % 50 + 1;
        cout << "The picked number is: " << number << endl;
        Sleep(1000);

        if (ynumber[i] == number)
        {
            cout << "Same same!" << endl;
            cor = cor + 1;
        }
        else
        {
            cout << "Hope for better luck next time ;)" << endl;
            falsed = falsed + 1; 
        }
    }

    system("cls");

    cout << "Thank you for participating!" << endl << "Correct picked numbers: " << cor << endl << "Wrong picked numbers: " << falsed << endl << endl;

    system("pause");

    return 0;
}

`

1 Ответ

0 голосов
/ 23 января 2019
int ynumber[5];

Длина вашего массива равна 5

for (int i = 0; i < 6; i++)
{
//...
     cin >> ynumber[i];

Вы перебираете индексы 0,1,2,3,4,5,Используйте свои пальцы, чтобы посчитать количество индексов, которые вы используете.Вы заметите, что вы получаете доступ к массиву на 6 разных пальцев.6 больше 5. Таким образом, мы можем заключить, что вы получаете доступ к массиву за пределами.Следствием этого является то, что поведение вашей программы не определено.

Решение. Не открывайте массив вне границ.Последний индекс массива длины n равен n - 1.

В более общем смысле: не полагайтесь на магические числа.В этом случае вы можете использовать вместо:

for (int i = 0; i < std::size(ynumber); i++)
...