下一个任务是: 生成 20 个随机数并从文件 tombula.txt 中读取包含用户姓名及其 9 个数字的信息后,打印第一个用户(他/她的名字),该用户的数组中的 3 个数字等于生成的数字。
这是我的代码部分,我生成数字并从文件中读取,但我不知道如何找到第一个从数组中包含 3 个数字等于生成数字的人,如果您知道如何编写,请帮忙:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
typedef struct
{ char name[50];
int num[8];
}someone;
void generating(int[]);
int check(int[], int);
int main(void)
{
someone *pK = NULL;
int i, j, count = 0, tip;
FILE *F;
int generated[30];
int brojac[5];
srand(time(NULL));
generating(generated);
for (int j = 0; j < 20; j++)
printf("%d ", generated[j]);
printf("\n\n\n");
F = fopen("tombula.txt", "r");
if (F == NULL)
{
printf("error!");
exit(1);
}
i = 0;
while (feof(F) == 0)
{
pK = ((someone *)realloc(pK, (i + 1)*sizeof(someone)));
fscanf(F, "%s", pK[i].name);
for (j = 0; j < 8; j++)
fscanf(F, "%d", &pK[i].num[j]);
i++;
count++;
}
i--;
count--;
for (int z = 0; z < count; z++){
printf("%s ", pK[z].name);
for (int k = 0; k < 8; k++){
printf("%d ", pK[z].num[k]);
}
printf("\n");
}
return 0;
}
void generating(int numbers[])
{
int i, tmp;
for (i = 0; i < 20; ++i)
{
tmp = rand() % 50 + 1;
if (check(numbers, tmp))
{
--i;
continue;
}
numbers[i] = tmp;
}
}
int check(int b[], int a){
int i;
int n = 8;
for (i = 0; i < 20; ++i)
{
if (b[i] == a)
return 1;
}
return 0;
}
最佳答案
1.您以r
模式打开文件。
2.在循环中(循环必须工作到 EOF)使用 fscanf()
读取文件中存储的数据。将 name
存储到 char 数组
和 number
到 整数数组
(如您在结构中定义的那样)。
3.内部循环检查3个数字
是否与生成的
数字匹配,以及是否打印
人员姓名
并使用 break
退出循环。
4.在此之后关闭
文件。
关于c - 文件和生成数字,c 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31407271/