如何在两个数组中查找匹配值?

时间:2019-01-25 13:04:25

标签: c

我需要让用户输入6个数字,然后将它们存储在名为winningNum []的数组中。然后,我必须读取一个文件,该文件包含一堆用户的firstName lastName和他们猜到的数字。我需要比较这两个数组,仅从至少匹配三个数字的文件中打印出用户的名字和姓氏。

这是输入文件用户的结构

kernel.shmmax=4294967296
kernel.shmall=1048576

从用户那里获得中奖号码

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

这是我读取文件并将其放入struct数组的地方

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] );
}

我实际上只需要存储正确中奖号码3 4 5 6的用户的名字和姓氏。

1 个答案:

答案 0 :(得分:0)

我承认您只需要提示即可解决问题。

不相关,但是您从不测试输入功能。当心单个错误的行会给出不确定的结果,甚至您都不知道问题出在哪里。记住:永远不要相信来自外部的东西。

回到您的问题。一种简单的方法是使用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
}