首页 > 解决方案 > 如何在两个数组中找到匹配的值?

问题描述

我需要让用户输入 6 个数字,并将它们存储在一个名为 winsNum[] 的数组中。然后我必须读入一个文件,其中包含一堆用户 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] );
}

这是我在文件中读取并将其放入结构数组的地方

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 的用户的名字和姓氏。

标签: c

解决方案


我承认你只需要提示就可以解决问题。

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

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

推荐阅读