fprintf函数写入异常(编写学生成绩信息管理系统的一点思考)

        这几天一直在写课设程序 “学生成绩信息管理系统”,主要思路是将学生信息存入链表当中,在“录入”,“修改”,“删除”操作后实际改变的是链表内容,因此需要将改变后的链表内容重新存入文件当中(文件已使用( fopen("StudentInformation,txt",“r”))打开)。

        我写了一个BAO_CUN ( node *List1 )函数来进行该项操作。

        首先使用 fopen ("StudentInformation.txt","w" ) 但是每次调用该函数时都只会将文件清空(说明"w”已成功执行),让已存在信息丢失,却不会再写入链表具体内容(该链表头结点名为 List,调用函数时填入 List1位置),导致形成一个新的空白文件。说明 fprintf 函数调用失败了。

         该函数原代码如下:

//4:文件保存 
int BAO_CUN(node *List1)   //思路:将更新后的链表替代已存在链表存入文件 
{
	node *rear = List1->next;
	
	FILE *fp =fopen("StudentInformation.txt","w"); 
	if (fp == NULL)
	{
		printf("\n\n文件写入失败\n");
		return 0;
	}
	else 
	{
		while ( rear!= NULL)
		{
			fprintf(fp,"%lld %s %s %d %d %d %d %d %.2lf\n",rear->IDnum, rear->name, rear->sex, rear->math,rear->English,rear->physic,rear->computer,rear->sum,rear->average);
			rear = rear->next;
		}
		return 1;
	}
 } 

这是原文件内容:

 这是调用函数后文件内容:

 还注意到:两个文件的编码方式都不一样了(ANSI在 Dev 的 cmd 窗口中汉字不会乱码,UTF-8会导致乱码),目前我也没搞懂为什么。

        在网上查阅了一些资料,发现需要额外加一个 fflush 函数,对文件进行缓冲,加入后发现确实可以储存了。但会导致最后几项数据丢失,应该是文件缓冲有部分数据滞留在缓冲区了,于是又加上了 fclose 函数,将文件关闭,同时缓冲区数据自动全部流出。最终数据成功保存到文件中。

        改动后代码如下:

//4:文件保存 
int BAO_CUN(node *List1)   //思路:将更新后的链表替代已存在链表存入文件 
{
	node *rear = List1->next;
	
	FILE *fp =fopen("StudentInformation.txt","w"); 
	if (fp == NULL)
	{
		printf("\n\n文件写入失败\n");
		return 0;
	}
	else 
	{
		while ( rear!= NULL)
		{
			fflush(fp);
			fprintf(fp,"%lld %s %s %d %d %d %d %d %.2lf\n",rear->IDnum, rear->name, rear->sex, rear->math,rear->English,rear->physic,rear->computer,rear->sum,rear->average);
			rear = rear->next;
		}
		fclose(fp);
		return 1;
	}
 } 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值