【发布时间】:2021-08-19 14:25:42
【问题描述】:
我正在尝试创建一个信息系统,但每当我尝试打印输出时,它只会打印出我输入的最后一件事。这是我正在使用的功能。
void displayStudents(){
FILE *fp;
fp = fopen("studentlist.txt", "rb");
if(!fp){
printf("File could not be opened.\n");
}else{
studentInfo s;
while(fread(&s, sizeof(studentInfo), 1, fp) && !feof(fp)){
printf("Student Number: %i\n", s.studentNumber);
printf("Last Name: %s\n", s.lastName);
printf("First Name: %s\n", s.firstName);
printf("Course: %s\n", s.course);
printf("Year Level: %i\n", s.yearLevel);
printf("Age: %i\n", s.age);
printf("Sex: %c\n", s.sex);
printf("Final Grade: %i\n", s.finalGrade);
printf("\n\n");
}
fclose(fp);
}
}
studentInfo 是一个包含以下内容的结构体...
struct studentInfo{
int studentNumber;
char lastName[15];
char firstName[15];
char course[15];
int yearLevel;
int age;
char sex;
int finalGrade;
};
typedef struct studentInfo studentInfo;
程序的输出如下:
Student Number: 0
Last Name:
First Name:
Course:
Year Level: 0
Age: 0
Sex:
Final Grade: 0
Student Number: 0
Last Name:
First Name:
Course:
Year Level: 0
Age: 0
Sex:
Final Grade: 0
Student Number: 3
Last Name: Rambo
First Name: Ra
Course: CS
Year Level: 1
Age: 10
Sex: F
Final Grade: 89
我尝试注册 3 名学生,但它只打印最后的信息,而不是之前的信息。我希望它能够显示我输入的所有学生信息。
【问题讨论】:
-
文件扩展名
.txt表示您的输入文件是文本文件。但是,您使用fread的事实意味着您的输入文件是二进制文件,而不是文本文件。请向我们展示您的输入文件的内容。 -
哦,我明白了,所以我使用了错误的文件类型。谢谢!现在可以使用了~
-
"File could not be opened.\n"是无用错误消息的典型示例,您将其写入错误的流。试试const char *path = "studentlist.txt"; if( (fp = fopen(path, "rb")) == NULL ){ perror(path);... -
在while循环条件下对
feof的调用完全没有意义。