C语言进阶(文件详解)2

目录

一、文件的顺序读写

1.格式化的输出函数(fprintf)

2.格式化的输入函数(fscanf)

3.二进制读写

1.二进制输出函数(fwrite)

2.二进制输入函数

 3.scanf,fscanf,sscanf、printf,fprintf,sprintf的区别

二、文件的随机读写

1.fseek函数

 2.ftell函数

3.rewind函数

三、被错误使用的feof

写代码test.txt文件拷贝一份,生成test2,txt

总结:


一、文件的顺序读写

兄弟们,上一章只介绍到了如何把单个的字符或者字符串如何写到文件里或者从文件中读取,文件的顺序读写后面还有几个函数没有介绍完,我们接着上一章继续,给大家介绍完,图片再拷给大家回顾回顾

1图片如下:

 

1.格式化的输出函数(fprintf)

这样我们就可以把格式化的数据写到文件里了。

代码如下:

#include<stdio.h>
struct S
{
	char arr[10];
	int num;
	float sc;
};
int main()
{
	struct S s = { "abcdef",20,5.5f };
	FILE* pf = fopen("test.dayta", "w");
	if (NULL == pf)
	{
		return 1;
	}
	//写文件
	fprintf(pf, "%s %d %f", s.arr, s.num, s.sc);//这就是如何把格式化的数据写到文件里
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;

}

2.格式化的输入函数(fscanf)

 

这样我们就可以从文件里读取格式化的数据了。

代码如下:

#include<stdio.h>
struct S
{
	char arr[10];
	int num;
	float sc;
};
int main()
{
	struct S s = {0};
	FILE* pf = fopen("test.dayta", "r");
	if (NULL == pf)
	{
		return 1;
	}
	//写文件
	fscanf(pf, "%s %d %f", s.arr, &(s.num), &(s.sc));//这就是如何把格式化的数据写到文件里
	printf("%s %d %f", s.arr, s.num, s.sc);
	fprintf(stdout, "%s %d %f", s.arr, s.num, s.sc);//这类函数参数不同,功能就不同,可以适用于所有的流
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;

}

3.二进制读写

1.二进制输出函数(fwrite)

以二进制的方式把数据写到文件里

 

代码如下:

struct S
{
    char arr[10];
    int num;
    float sc;
};
int main()
{
    struct S s = {"abcdef",20,5.5f};
    FILE* pf = fopen("test.dayta", "w");
    if (NULL == pf)
    {
        return 1;
    }
    //写文件
    fwrite(&s, sizeof(struct S), 1, pf);
    //关闭文件
    fclose(pf);
    pf = NULL;
    return 0;

}

 

2.二进制输入函数

以二进制的方式从文件里读取数据

代码如下:

#include<stdio.h>
struct S
{
	char arr[10];
	int num;
	float sc;
};
int main()
{
	struct S s = {0};
	FILE* pf = fopen("test.dayta", "r");
	if (NULL == pf)
	{
		return 1;
	}
	//写文件
	fread(&s, sizeof(struct S), 1, pf);
	printf("%s %d %f", s.arr, &(s.num), &(s.sc));
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;

}

 3.scanf,fscanf,sscanf、printf,fprintf,sprintf的区别

scanf —  针对标准输入的格式化的输入语句—stdin

fscanf — 针对所有输入流的格式化的输入语句 — stdin/文件

sscanf — 从一个字符串中读取一个格式化的数据

printf — 针对标准输出的格式化语句 — stdout 

fprintf — 针对所有输出流的格式化输出语句 — stdout/文件

sprintf — 把一个格式化的数据,转换成字符串

二、文件的随机读写

1.fseek函数

fseek函数:根据文件指针的位置和偏移量来定位文件指针。

代码如下:

#include<stdio.h>

int main()
{
	
	FILE* pf = fopen("test.data", "r");
	if (NULL == pf)
	{
		perror("main");
		return 1;
	}
	//读取文件
	int ch = fgetc(pf);
	printf("%c\n", ch);
	//调整文件

	fseek(pf, 2, SEEK_END);
	int ch = fgetc(pf);
	printf("%c\n", ch);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;

}

 2.ftell函数

ftell函数:返回文件指针相对于起始位置的偏移量(告知偏移量是多少)

 

3.rewind函数

rewind函数:让文件指针的位置回到文件的起始位置

 

三、被错误使用的feof

feof(文件结束返回非0)

feof应用于当文件读取结束的时候,判断是读取失败结束,还是遇文件尾结束

fgetc函数在读取结束的时候,会返回EOF,正常读取的时候,返回的是读取到的字符ASCII码值

fgets函数在读取结束的时候返回NULL,正常读取的时候返回存放字符串的空间起始地址。

fread函数在读取的时候,返回的是实际读取到的完整元素的个数。如果发现读取到的元素个数小于指定的元素个数,这就是最后一次读取了。

写代码test.txt文件拷贝一份,生成test2,txt

#include<stdio.h>

int main()
{
	
	FILE* pfread = fopen("test.txt", "r");
	if (NULL == pfread)
	{
		return 1;
	}
	FILE* pfwrite = fopen("test2.txt", "w");
	{
		if (pfread == NULL)
		{
			fclose(pfread);
			pfread = NULL;
				return 1;
		}
		//文件打开成功
		//读写文件
		int ch = 0;
		while((ch = fgetc(pfread))!= EOF)
		{
			//写文件
			fputc(ch, pfwrite);
		}
	}

	//关闭文件
	fclose(pfwrite);
	pfwrite = NULL;
	return 0;

}

总结:

综合两篇文章简单的介绍了什么是文件,文件的使用和操作方法,学会文件的使用让我们能更进一步加深对编程的了解,相信大家都学会了。如果上述文章有任何问题 ,欢迎大佬们提出质疑,我会虚心学习和改正,最重要的是能共同进步,共同成长,学习好编程。

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K稳重

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值