gpt4 book ai didi

c - Fread函数和文件

转载 作者:行者123 更新时间:2023-11-30 16:06:42 26 4
gpt4 key购买 nike

我必须编写一个程序来打印在文本文件中找到的学生的姓名和分数。文本文件本身将遵循以下格式:学生人数(整数)成绩名称(一号学生)成绩名称(二号学生)

例如,您将看到我用于该程序的 Students.txt 文件应该是这样的:245 乔治约翰福音 23 章

程序的读取部分(对于结构)应该使用 fread 完成。我已经尝试过您将在下面看到的内容,问题是当我运行该程序时,控制台仍保持空白。请注意,该程序尚未完成,因为我想先了解一些事情是如何工作的(例如,我只是想打印学生的分数,以便我可以看看我是否知道自己在做什么),然后再进行操作它正确,我知道缺少一些部分,例如检查 NULL 返回。我还想知道,由于我使用的是 fread,txt 文件是否应该被视为二进制文件。

这是我尝试过的:

#include <stdio.h>
#include <stdlib.h>

#define FILENAME students.txt
#define MAX 50
typedef struct st {
float score;
char name[MAX];
} student;

void read(FILE *fp, student *p, int size);



int main()
{
int number;
student *ptr;
FILE *ifp;

ifp = fopen("FILENAME", "rb");

fscanf(ifp, "%d", &number);

ptr = (student *)malloc(number * sizeof(student));

read(ifp, ptr, number);
}

void read(FILE *fp, student *p, int size)
{
int num;

fscanf(fp,"%d", &num);

fread(p, sizeof(student), size, fp);

for(int i=0; i<size; i++)
printf("%f", p[i].score);
}

最佳答案

您正在打开一个名为“FILENAME”的文件,而不是“students.txt”,这就是您的命令行保持空白的原因。改变

#define FILENAME Students.txt

进入

#define FILENAME "students.txt"

fopen("FILENAME", "rb");

进入

fopen(FILENAME, "r");

此外,fread 要求调用者知道他们正在读取的元素的确切大小,但由于学生姓名的长度可变,因此情况并非如此。您应该使用 fgets 来代替。您可以阅读有关 fgets 的更多信息 here .

fread 只能在二进制输入/输出的情况下使用,通常是调用者已知大小的内存块(数组或结构)。

关于c - Fread函数和文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59880437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com