Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在两个数组中查找匹配值?_C - Fatal编程技术网

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

C 如何在两个数组中查找匹配值?,c,C,我需要让用户输入6个数字,然后将它们存储在一个名为winningNum[]的数组中。然后我必须读入一个文件,其中有一群用户firstName lastName和他们猜到的数字。我需要比较这两个数组,只打印出至少匹配三个数字的文件中用户的名字和姓氏 这是输入文件用户的结构 typedef struct { char firstName [20]; char lastName [20]; int numbers[6]; }KBLottoPlayer; 从用户处获取中奖号码

我需要让用户输入6个数字,然后将它们存储在一个名为winningNum[]的数组中。然后我必须读入一个文件,其中有一群用户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;
}
KBLottoPlayer*readArray()
{
int i,大小;
文件*in=fopen(“KnightsBall.in”,“r”);
fscanf(在“%d”中,&size);
kblotoplayer*温度;
temp=(KBLottoPlayer*)malloc(sizeof(KBLottoPlayer)*大小);
如果((in=fopen(“KnightsBall.in”,“r”))!=NULL)
{
字符缓冲区[100];
FGET(缓冲区,5英寸);

对于(i=0;i我承认你只需要提示就可以解决问题

不相关,但您从不测试您的输入函数。请注意,一行错误将给出未定义的结果,您甚至不知道问题出在哪里。请记住:永远不要相信来自外部的信息

回到你的问题上来。一个简单的方法是使用两个嵌套循环,一个在中奖号码上,一个在猜到的号码上,只计算匹配数:如果匹配总数至少为3,则保留记录,否则拒绝记录。你甚至可以在读取文件时这样做(此处为伪代码):

int recnum=0;//要存储的下一条记录

对于(int i=0;i为什么您要多次打开该文件?哎呀,我不是有意这么做的。顺便说一句:您的
getnum()
函数是无意义的。它读取六个数字并将它们存储在本地数组中。一旦函数返回,本地变量就会消失。我知道我这样做是为了跳过输入文件的第一行,因为第一行只告诉我文件中有多少条目。
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
}