c - 如何在两个数组中找到匹配的值?
问题描述
我需要让用户输入 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 的用户的名字和姓氏。
解决方案
我承认你只需要提示就可以解决问题。
不相关,但您从不测试您的输入功能。当心一条不正确的行会给出不确定的结果,你甚至不知道问题出在哪里。记住:永远不要相信来自外部的东西。
回到你的问题。一种简单的方法是使用 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
}
推荐阅读
- vuejs2 - 赛普拉斯文件上传错误与 cypress-file-upload
- javascript - 从 chrome 扩展中获取数据
- java - 打开安卓的闹钟功能?
- authentication - 使用 OpenId Connect 进行 Apple 身份验证后出现 404 错误
- python - 试图运行 make 命令,但得到了这个错误
- xcode - 如何在持续集成中对 macOS 应用程序进行代码签名
- php - Laravel 多表认证未登录
- jquery - 使用 Asp.Net MVC Ajax JQuery 调用的部分视图返回加载非常慢
- python - Python找到具有运行长度编码的最小长度压缩字符串,我们可以删除n个连续字符以获得最小长度
- angular - 我想建立一个像特斯拉(或任何汽车公司)定制构建和配置系统的网站。什么是最好的框架?