我需要让用户输入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的用户的名字和姓氏。
答案 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
}