完整代码可以查看我文章里的 学生成绩管理系统
fprintf函数如果写入失败返回负值,成功的话返回实际写入的字节数。
题主的代码问题出在 if(ret!=sizeof(struct student)),在博文中结构体的定义如下:
struct student{
int id; //学号
char name[20]; //姓名
char sex[5]; //性别
float grade1; //高等数学
float grade2; //大学英语
float grade3; //大学物理
float avg; //平均分
float sum; //总分
};
先不论结构体的实际长度,sizeof(struct student)求出的是student结构体占用的内存空间大小,是一个定值;而ret是fprintf实际写入文件的字符数,是变化的。例如int类型占用内存是4个字节,而整数可以是1位数,也可能是5位数,所以ret和sizeof(struct student)基本上是不会相等的。
当fprintf()
函数运行成功时,它返回的是输出字符的个数;否则它返回一个负数。
如果你要判断fprintf()
函数是否运行成功,应该判断它的返回值是否大于0。
if (fprintf(fp, "%d", i) > 0)
printf("sucess\n");
else
printf("failled\n");
参考
https://en.cppreference.com/w/cpp/io/c/fprintf
供参考:
if (ret == 8)
{
color(2);
printf("\n\t[tip]文件写入成功\n");
color(7);
}
else {
color(772);
printf("\n\t[错误]文件写入失败\n");
color(7);
}