Как правильно сравнить два массива, хранящихся в памяти? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь создать функцию, которая должна сравниваться с массивами, одна из которых генерируется сама собой (цифры лотереи), а второй массив отправляется и сохраняется при вводе пользователем.

Предполагается, что для подсчета совпадают цифры между лотереей и цифрами, введенными пользователем. Если они совпадают, должно отображаться сообщение о том, что он выиграл большой приз, и т. Д.

Предполагается, что это функция, которая сравнивает оба массива; Я предполагаю, что это правильно (чтобы было более понятно: программа должна сравнивать соответствующие элементы в двух массивах и вести подсчет совпадающих цифр)?

int compare(int user[], int lottery[]){
    int matches = 0;
    for (int i = 0; i < SIZE; i++) {
        if (user[i] == lottery[i]) {
            matches++;
        }
    }
    return matches;
}

проблема возникает, когда она возвращается к основной функции, которая должна сообщать, выиграл пользователь или нет. Вот небольшой блок кода, который я создал в основной функции:

    int matches = compare(user, lottery);

    if (matches) {

        cout << "Congratulations, you have won the big prize" << endl;
    }
    else {
        cout << "Please, try again" << endl;
    }

Ожидается, что в случае выигрыша пользователь должен будет отобразить сообщение и подсчитать цифры пользователя, совпадающие с номерами лотереи.

Фактический результат - цифры, введенные пользователем. Надеюсь, я смогу объяснить.

Вот полный код, если вы хотите помочь и вам нужно больше информации. http://cpp.sh/8ivyc

Ответы [ 3 ]

2 голосов
/ 16 апреля 2019

В вашем случае достаточно иметь только одно и то же значение для одного и того же индекса, но все значения должны быть равны

Первая возможность с минимальными изменениями в вашем коде:

int compare(int user[], int lottery[]){
    int matches = 0;
    for (int i = 0; i < SIZE; i++) {
        if (user[i] == lottery[i]) {
            matches++;
        }
    }
    return (matches == SIZE); /* <<< modified */
}

Но бесполезно продолжать сравнение после того, как было найдено другое значение, поэтому может быть:

int compare(int user[], int lottery[]){
    for (int i = 0; i < SIZE; i++) {
        if (user[i] != lottery[i]) {
            return 0;
        }
    }
    return 1;
}

и потому, что вы находитесь в C ++:

bool compare(int user[], int lottery[]){
    for (int i = 0; i < SIZE; i++) {
        if (user[i] != lottery[i]) {
            return false;
        }
    }
    return true;
}

(также изменение вызова для использования bool вместо int , чтобы было более понятно, конечно)

0 голосов
/ 16 апреля 2019

Проверка на неравенство, а не равенство. Вы выйдете из функции , как только пользовательский элемент не будет равен элемент лотереи

int compare(int user[], int lottery[]){
    for (size_t i = 0; i < SIZE; i++) {
        if (user[i] != lottery[i]) {
            return 0;
        }
    }
    return 1;
}

0 голосов
/ 16 апреля 2019

Самый простой способ - просто использовать std::array.Если вы используете std::array, вы можете просто использовать == для их сравнения!

Функции populate и show_values можно записать так:

void populate(std::array<int, SIZE>& nums) {
    srand(time(0));
    for (int& value : nums) {
        value = rand() % 9;
    }
}

void showValues(std::array<int, SIZE>& nums) {
    for (int i = 0; i < SIZE; i++) {
        cout << setw(3) << nums[i];
    }
    cout << endl;
}

И compare особенно просто:

bool compare(std::array<int, Size>& nums1, std::array<int, Size>& nums2) {
    return nums1 == nums2;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...