C语言学习---二进制读写文件feof、fread、fwrite的注意事项

示例一:

逐个读取字节方式把文件stu.txt内容复制到stu_data.txt。

源代码:

#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
int main()
{
	char data;
	FILE* fp1, * fp2;
	fp1 = fopen("stu.txt", "rb");
	fp2 = fopen ("stu_data.txt", "wb");
	if (fp1 == NULL || fp2 == NULL)
	{
		printf("Can not open the files!\n");
		exit(0);
	}
	fread(&data, sizeof(char), 1, fp1);
	while (!feof(fp1))//理解为feof返回值为非真时执行while内语句,
					//由于feof未结束时返回的都是0,因此可以作为判断标准
                    //或者写成"while(feof(fp1)==0)"
	{
		fwrite(&data, sizeof(char), 1, fp2);
		fread(&data, sizeof(char), 1, fp1);
	}
	fclose(fp1);
	fclose(fp2);
	return 0;
}

示例二:

从键盘中依次输入三个学生的信息到结构体变量中,同时把结构体变量中的信息写到“stu_data.dat”中(二进制文件),最后从文件中读取所有学生的信息并显示。

源代码:

#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
struct STU
{
	char name[10];
	int age;
	float score;
};
int main()
{
	struct STU stu;//只能设置为单个的结构体,不能设置为数组,因为读取和写入都是一行一行的,读取/写入一次就会覆盖一次stu
	FILE* fp;
	int i;
	fp = fopen("stu_data.dat", "wb");
	if (fp == NULL)
	{
		printf("无法打开文件\n");
		exit(0);
	}
	for (i = 0; i < 3; i++)
	{
		printf("请输入学生_%d的姓名、年龄、成绩:", i + 1);
		scanf("%s %d %f", stu.name, &stu.age, &stu.score);
		fwrite(&stu, sizeof(struct STU), 1, fp);
	}
	fclose(fp);
	fp = fopen("stu_data.dat", "rb");
	if (fp == NULL)
	{
		printf("无法打开文件\n");
		exit(0);
	}
	printf("\n学生信息为:\n");
	i = 1;
	while (fread(&stu, sizeof(struct STU), 1, fp) == 1)
	{
		printf("学生_%d的姓名%s 年龄:%4d 成绩:%6.2f\n",
			i++, stu.name, stu.age, stu.score);
           //不能在后面fread,while循环中已经在每一次循环执行了fread,
           //在内部执行fread则还没来得及输出这一行,就会被while循环中的fread再次读取覆盖掉数据
	}
	fclose(fp);
	return 0;
}

如果用记事本打开“stu_data.dat”文件,看见的会是一串乱码,乱码表示文件类型不是文本文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值