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图片如下:

 C语言进阶(文件详解)2_第1张图片

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

C语言进阶(文件详解)2_第2张图片

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

代码如下:

#include
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)

C语言进阶(文件详解)2_第3张图片

 

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

代码如下:

#include
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.二进制输入函数

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

C语言进阶(文件详解)2_第4张图片

代码如下:

#include
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函数:根据文件指针的位置和偏移量来定位文件指针。

C语言进阶(文件详解)2_第5张图片

代码如下:

#include

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函数:返回文件指针相对于起始位置的偏移量(告知偏移量是多少)

C语言进阶(文件详解)2_第6张图片

 

3.rewind函数

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

C语言进阶(文件详解)2_第7张图片 

三、被错误使用的feof

feof(文件结束返回非0)

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

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

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

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

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

#include

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;

}

总结:

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

你可能感兴趣的:(c语言,开发语言,后端,c++,小程序)