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