#c语言 fprintf函数 怎么判断是否成功写入文件#

这样子写,即使写入成功,也也是运行写入失败!请问该怎么改

完整代码可以查看我文章里的 学生成绩管理系统

img


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);
}