以下这段代码哪里出错了?int save_students() { FILE *fp = fopen_s(FILE_NAME, "w"); if (fp == NULL) { printf("Failed to open file %s!\n", FILE_NAME); return 0; } for (int i = 0; i < student_num; i++) { fprintf(fp, "%s %s %s %s %f %s\n", students[i].id, students[i].name, students[i].gender, students[i].birth, students[i].score, students[i].department); } fclose(fp); return 1; }
时间: 2024-01-26 21:03:54 浏览: 51
这段代码中的错误在于使用了错误的文件打开方式,应该使用fopen函数代替fopen_s函数来打开文件。正确的代码如下:
```
int save_students() {
FILE *fp = fopen(FILE_NAME, "w");
if (fp == NULL) {
printf("Failed to open file %s!\n", FILE_NAME);
return 0;
}
for (int i = 0; i < student_num; i++) {
fprintf(fp, "%s %s %s %s %f %s\n", students[i].id, students[i].name, students[i].gender, students[i].birth, students[i].score, students[i].department);
}
fclose(fp);
return 1;
}
```
需要注意的是,fopen函数的第一个参数是文件名,而不是文件指针。
相关问题
解释以下代码原理void save_student_info() { FILE* fp = fopen("student_info.txt", "w"); if (fp == NULL) { printf("无法打开文件!\n"); return; } fprintf(fp, "%d\n", student_num); for (int i = 0; i < student_num; i++) { fprintf(fp, "%s %s %f %f %f\n", students[i].name, students[i].id, students[i].scores[0], students[i].scores[1], students[i].scores[2]); } fclose(fp); printf("保存成功!\n"); } // 从文件中读取学生信息 void load_student_info() { FILE* fp = fopen("student_info.txt", "r"); if (fp == NULL) { printf("无法打开文件!\n"); return; } fscanf(fp, "%d", &student_num); for (int i = 0; i < student_num; i++) { fscanf(fp, "%s %s %f %f %f", students[i].name, students[i].id, &students[i].scores[0], &students[i].scores[1], &students[i].scores[2]); } fclose(fp); printf("读取成功!\n"); }
这是一个用于将学生信息保存到文件中和从文件中读取学生信息的代码。
在保存学生信息时,程序首先通过fopen函数打开一个名为“student_info.txt”的文件,以写入(w)模式打开。如果打开失败,则输出“无法打开文件!”并返回。接着,程序使用fprintf函数向文件中写入学生信息,其中第一行写入学生总数,后面每一行写入一个学生的姓名、学号和各门课程的成绩。最后,程序使用fclose函数关闭文件并输出“保存成功!”。
在读取学生信息时,程序同样使用fopen函数打开一个名为“student_info.txt”的文件,以读取(r)模式打开。如果打开失败,则输出“无法打开文件!”并返回。接着,程序使用fscanf函数从文件中读取学生信息,首先读取第一行学生总数,然后逐行读取每个学生的姓名、学号和各门课程的成绩,并将这些信息存储到相应的结构体变量中。最后,程序使用fclose函数关闭文件并输出“读取成功!”。
#include <stdio.h> #include <stdlib.h> #define SIZE 5 struct Student_type { char name[5]; int num; int age; char addr[15]; }stud[SIZE]; void save() { FILE *fp; int i; if((fp=fopen("stu10-4.txt","wb"))==NULL) { printf("cannot open file\n"); return; } for(i=0;i<SIZE;i++) if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1) printf("file write error\n"); //fcolse(fp); } void load() { FILE *fp; int i; if((fp=fopen("stu_list","rb"))==NULL) { printf("cannot open file\n"); exit(0); } for(i=0;i<SIZE;i++) if(fread(&stud[i],sizeof(struct Student_type),1,fp)!=1) { if(feof(fp)) { fclose(fp); return; } printf("file read error\n"); } printf("load end\n"); //fcolse(fp); } int main() { int i; printf("Please enter data of students:\n"); // for(i=0;i<SIZE;i++) // scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr); load(); for(i=0;i<SIZE;i++) printf("%10s,%5d,%5d%20s\n",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr); save(); return 0; }
这是一个 C 语言程序,实现了读写文件的功能,可以将学生信息存储到文件中,并从文件中读取信息并输出。程序中定义了一个结构体 Student_type,包含学生的姓名、学号、年龄和地址。首先定义了一个数组 stud 存储学生信息,然后通过 load 函数从文件中读取信息,如果文件不存在则输出错误信息并退出程序;如果读取信息时发生错误,则输出错误信息。接着通过 save 函数将学生信息写入文件中,如果文件无法打开则输出错误信息。最后在主函数中输出学生信息并保存到文件中。
阅读全文