c функция для сравнения наивысших значений двух разных массивов (применяется для раздачи стеках старших карт в покере) - PullRequest
0 голосов
/ 11 апреля 2020
#include <stdio.h>

int highcard (int array[])
    {
        int i, j;
        int largest = array[0];
        for (i=0; i<5; i++)
            {
                if (largest < array[i])
                    {
                        largest = array[i];
                    }
            }

        printf("largest element is %d", largest);
        return largest;
    }




int main()
    {
        int hand1[5]={8, 10, 6 , 4, 2};
        int hand2[5]={13, 5, 3, 9, 12};
        int largest;

        highcard(hand1[5]);
        int largest1 = largest;
        return largest1;

        highcard(hand2[5]);
        int largest2 = largest;
        return largest2;

        if (largest1 < largest2)
            {
               printf("winner: hand2");
            }
        else
            {
                printf("winner: hand1");
            }
        return 0;
    }

Я пытаюсь разработать программу, которая разбивает две сильные руки в покере. Для этого я «перевожу» значения карт в числа (2 = 2 ... A = 14), и для этого конкретного случая c максимальный размер массива всегда будет 5 (5 карт). Моя проблема в том, как мне сравнить возвращаемые значения одной и той же функции при применении к двум различным массивам?

Что я имею в виду:

  • У меня есть рука (массив) 1
  • У меня есть hand2
  • Я определяю наибольшее количество рук1 и возвращаю его
  • Я делаю то же самое для hand2
  • В main () я хочу сравните возврат (наибольшее число) старшего знака, примененного к hand1, а затем к hand2

Но как мне указать в main () указанное значение c возвращаемого значения функции highcard применительно к hand1, а затем к hand2 и сохраняя оба возврата разделенными?

Это то, что я пробовал до сих пор.

PS: Это для проекта университета / колледжа, я только начал программировать этот семестр, поэтому любое подробное объяснение из моих ошибок / ошибок и как их исправить было бы очень ценится:)

1 Ответ

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

У вас есть несколько недоразумений.

highcard(hand1[5]);

Здесь вы хотите вызвать функцию highcard и передать массив из 5 элементов hand1. Для этого не указывайте размерность в скобках. Это работает только когда вы объявляете массив. Вместо этого происходит передача шестого элемента hand1 - первый элемент имеет индекс 0 - в функцию. Этот элемент не существует. Вы также должны получить предупреждение, потому что целое число не является массивом; типы аргументов не совпадают.

return largest1;

Здесь вы, вероятно, хотите сохранить что-то в largest1, но на самом деле вы возвращаетесь из функции с заданным значением. Это означает, что вы покидаете текущую функцию. Оставив main означает, что вы остановите программу. Вам не нужно return здесь, просто сохраните значение.

int largest1 = largest;

Здесь вы пытаетесь получить доступ к переменной largest из highcard, но переменная thzat является локальной highcard и поэтому невидим для вашей main функции. Rhe largest, на которую вы смотрите, является просто не связанной неинициализированной переменной.

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

int main(void)
{
    int hand1[5] = {8, 10, 6 , 4, 2};
    int hand2[5] = {13, 5, 3, 9, 12};

    int largest1 = highcard(hand1);
    int largest2 = highcard(hand2);

    if (largest1 < largest2) {
        printf("winner: hand2");
    } else {
        printf("winner: hand1");
    }

    return 0;
}
...