c语言 - 我无法从二进制文件显示到文本文件



我需要写一个C程序,它的结构是&;有一些参赛者和以下子节目的数据:

  1. 从键盘上读取选手数据的子程序。
  2. 将数据写入二进制文件的子程序。
  3. 在控制台上显示所有参赛者及其数据的子程序。
  4. 一个子程序,在文本文件中显示所有10个任务的基本分数为30分,特殊分数为50分并获得"1"(0和1是唯一选项)的所有参赛者。

我设法做正确的前3个子程序,但似乎我有一个问题在第四个。我打开二进制文件和文本文件,然后我试着从文件中读取选手,直到没有更多的选手,看看基本分数是30,特殊分数是50,和"1";对于所有10个任务,如果是这样,我尝试在名为"raport.txt"的文件中显示符合这些条件的每个参赛者的名称,但没有任何输出。下面是我的结构体和第四个子程序:

typedef struct contestants {
int marca;
char special;
char name[30];
int category;
char basepoints;
char elem[10];
};
void raport()
{
FILE* f;
FILE* g;
fopen_s(&g, "raport.txt", "w");
fopen_s(&f, "contestants.dat", "rb");
contestants a;
while (fread(&a, sizeof(contestants), 1, f) == 1)
{
int ok = 1;
if (a.marca != 0 && a.basepoints == 30 && a.special == 50)
{
for (int i = 0; i < 10; i++)
{
if (a.elem[i] == 0)
{
ok = 0;
break;
}
}
}
if (ok == 1)
{
fprintf_s(g, "%sn", a.name);
}
}
fclose(f);
fclose(g);
}

如果基本分数或特殊值不符合要求,则跳过检查elem数组的循环,因此ok仍被设置为1。因此,在这种情况下,它打印记录。

您应该将if (ok == 1)代码移动到第一个if块中。

while (fread(&a, sizeof(contestants), 1, f) == 1)
{
if (a.marca != 0 && a.basepoints == 30 && a.special == 50)
{
int ok = 1;
for (int i = 0; i < 10; i++)
{
if (a.elem[i] == 0)
{
ok = 0;
break;
}
}
if (ok == 1)
{
fprintf_s(g, "%sn", a.name);
}
}
}