【发布时间】:2020-01-23 22:38:05
【问题描述】:
我必须编写一个程序来打印在文本文件中找到的学生的姓名和分数。文本文件本身将遵循以下格式: 学生人数(整数) 成绩名(一号学生) 分数名(二号学生)
例如,您将看到我用于该程序的students.txt 文件应该是这样的: 2 45 乔治 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);
}
【问题讨论】:
-
#define FILENAME students.txt-->#define FILENAME "students.txt",ifp = fopen("FILENAME", "rb");-->ifp = fopen(FILENAME, "rb"); -
所描述的文件格式不适合用
fread阅读。fread要求您知道元素的大小,但是……您不知道 -
至于文件名,它在我的书中的“”之间,虽然我也以你提到的方式看到过。我会尝试这些,希望它有效谢谢
-
@4386427 你的意思是结构的元素?
-
嗯,文件有扩展名并不重要
.txt重要的是文件里面有什么......
标签: c