C语言超详细文件操作基础下篇

 更新时间:2022年03月15日 16:42:16   作者:K稳重  
这篇文章主要为大家详细介绍了C语言的文件操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

一、文件的顺序读写

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

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

总结

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

到此这篇关于C语言超详细文件操作基础下篇的文章就介绍到这了,更多相关C语言 文件操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言统计输入字符各个字母出现频率的解题思路

    C语言统计输入字符各个字母出现频率的解题思路

    这篇文章主要介绍了C语言统计输入字符各个字母出现频率的解题思路,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • C++简明图解this指针的使用

    C++简明图解this指针的使用

    this 指针在C++类和对象中是个很方便实用的关键字,可以简化对象成员属性的调用,使代码表达的含义更加准确;在之前的学习中我们都可以判断变量所占内存空间大小,那么我们创建的类对象所占的内存空间怎么计算呢?想知道this的妙用和类对象占用的内存空间就来跟我学习吧
    2022-06-06
  • C++深入分析讲解类的知识点

    C++深入分析讲解类的知识点

    C++类,是指系统在第一次在程序中遇到一个类时为这个类建立它的所有类变量的拷贝 - 这个类的所有实例共享它的类变量
    2022-06-06
  • 如何在C++类的外部调用类的私有方法

    如何在C++类的外部调用类的私有方法

    这篇文章主要介绍了如何在C++类的外部调用类的私有方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • QT实现串口通信的完整步骤

    QT实现串口通信的完整步骤

    如果用qt写程序作为上位机,然后通过和usb和下位机通信的时候,就需要用到qt中的串口通信了,下面这篇文章主要给大家介绍了关于QT实现串口通信的相关资料,需要的朋友可以参考下
    2023-02-02
  • 详解C++函数类型与重载函数

    详解C++函数类型与重载函数

    这篇文章主要为大家介绍了C++函数类型与重载函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • C语言中用于产生随机数的函数使用方法总结

    C语言中用于产生随机数的函数使用方法总结

    这篇文章主要介绍了C语言中用于产生随机数的函数使用方法总结,分别介绍了rand()函数和srand()函数以及封装出的arc4random()函数,需要的朋友可以参考下
    2016-05-05
  • C++四种强制转换原理与价值

    C++四种强制转换原理与价值

    这篇文章主要介绍了C++的四种强制转换原理与价值,文中介绍的非常详细,对学习C语言有一定的参考价值,感兴趣的小伙伴可以参考一下
    2023-04-04
  • C++中的erase()函数用法小结

    C++中的erase()函数用法小结

    本文主要介绍了C++中的erase()函数用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • C++实现LeetCode(81.在旋转有序数组中搜索之二)

    C++实现LeetCode(81.在旋转有序数组中搜索之二)

    这篇文章主要介绍了C++实现LeetCode(81.在旋转有序数组中搜索之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论