Как найти совпадающие значения в двух массивах? - PullRequest
0 голосов
/ 25 января 2019

Мне нужно, чтобы пользователь ввел 6 чисел, и я сохраняю их в массиве winNum []. Затем мне нужно прочитать файл, в котором есть группа пользователей firstName lastName и числа, которые они угадали. Мне нужно сравнить эти два массива и распечатать только имя и фамилию пользователя из файла, которому сопоставлено минимум три числа.

Это структура для пользователей входного файла

typedef struct
{
    char firstName [20];
    char lastName [20];
    int numbers[6];
}KBLottoPlayer;

Получение выигрышных номеров от пользователя

int getNum()
{
    int winningNum[6];
        int i;

    printf("Please enter the six nunbers between 1-53:\n");
        scanf("%d %d %d %d %d %d", &winningNum[0], &winningNum[1], 
&winningNum[2] ,&winningNum[3], &winningNum[4], &winningNum[5] );
}

Здесь я читаю файл и помещаю его в массив struct

KBLottoPlayer* readArray()
{
    int i,size;
    FILE *in = fopen("KnightsBall.in","r");
        fscanf(in,"%d",&size);

KBLottoPlayer* temp;
temp =(KBLottoPlayer*)malloc(sizeof(KBLottoPlayer)*size);

    if((in = fopen("KnightsBall.in", "r")) != NULL )
  {
        char buffer[100];
        fgets(buffer, 5, in);

        for(i=0;i<size;i++)
        {
            fscanf(in," %s %s ", temp[i].firstName, temp[i].lastName);
        fscanf(in,"%d %d %d %d %d %d ", &temp[i].numbers[0], 
&temp[i].numbers[1], &temp[i].numbers[2], &temp[i].numbers[3], 
&temp[i].numbers[4], &temp[i].numbers[5]);
    }
  }
else
{
printf("File is Not Exist.\n");
}
return temp;
}

Мне по сути нужно хранить только имя и фамилию пользователей, которые получили 3 4 5 6 правильных выигрышных номеров.

1 Ответ

0 голосов
/ 25 января 2019

Я признаю, что вам нужны только подсказки, чтобы обойти проблему.

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

Назад к вашей проблеме.Простой способ состоит в том, чтобы использовать 2 вложенных цикла, один на выигрышных числах и один на угаданных, просто подсчитывая совпадения: если общее количество совпадений составляет не менее 3, вы сохраняете запись, иначе вы ее отклоняете.Вы даже можете сделать это при чтении файла (здесь, в псевдокоде):

int recnum = 0;   // next record to store
for (int i=0; i<size; i++) {     // loop over the input file
    read the line into temp[recnum]
    int count = 0;                // number of correct guesses
    for (int j=0; j<6; j++) {     // loop over the winning numbers
        for (int k=0; k<6; k++) { // loop over the guessed numbers
            if winning[j] == guessed[k] {
                count++;
            }
        }
    }
    if (count >= 3) recnum++;      // only keep if at least 3 correct guesses
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...