C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学)

这篇具有很好参考价值的文章主要介绍了C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人主页:点我进入主页

专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶

C语言刷题

欢迎大家点赞,评论,收藏。

一起努力,一起奔赴大厂。

目录

1.前言

2.写文件函数与读文件函数

2.1fputc函数

2.2fgetc函数

2.3fputs函数

2.4fgets函数

2.5fprintf函数

2.6fscanf函数

2.7sprintf函数与sscanf函数

2.8fwrite函数

2.9fread函数 

3.通讯录的改进

4.文件的随机读写

4.1fseek函数

4.2ftell函数

4.3rewind函数

 5.总结


1.前言

         在前面我们写到过文件的打开与关闭用到了函数主要是fopen函数,参数是文件的文件名和打开方式,文件关闭函数fclose,参数是流,我们还讲到过流,今天我们讲解一些写文件与读文件函数以及对通讯录的改进还有一些文件的其他函数。

2.写文件函数与读文件函数

功能 函数名 适用于
字符输入函数 fgetc 所有输入流
字符输出函数 fputc 所有输出流
文本行输入函数 fgets 所有输入流
文本行输出函数 fputs 所有输出流
格式化输入函数 fscanf 所有输入流
格式化输出函数 fprintf 所有输出流
二进制输入 fread 文件
二进制输出 fwrite 文件

2.1fputc函数

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

        我们在cplusplus网中 fputc看到它的第一个参数是int  chararcter,这个含义是想要存储的字符信息,第二个参数是流在这里指fopen函数的返回值,fputc函数是将chararcter存入文件中,我们写一个代码将abcdef放到文件中,详细代码如下:

#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	int i;
	for (i = 'a'; i <= 'f'; i++)
	{
		fputc(i, pf);
	}
	fclose(pf);
	pf = NULL;
	return 0;
}

我们运行后打开文件data.txt

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

我们可以看到abcdef已经写到了文件中 先打开文件,再利用循环利用写入字符函数fputc进行信息的存储。

2.2fgetc函数

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

        我们进入cplusplus网站fgetc我们看到它的参数是流,返回值是int类型,hfgetc函数的作用是读取文件的一个字符,我们写一个代码读取fputc函数存在文件的信息,详细代码如下:

#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	int i,ch;
	for (i = 'a'; i <= 'f'; i++)
	{
		ch = fgetc(pf);
		printf("%c", ch);
	}
	fclose(pf);
	pf = NULL;
	return 0;
}

我们运行结果如下:

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

2.3fputs函数

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

         我们进入cplusplus网站fputs,函数的第一个参数是const char *str是将str中的内容传到文件中,第二个参数是流 ,返回类型是int,fputs函数的作用是将字符串传到文件中,我们写一个代码将字符串abcdefgh传到文件中,详细代码如下:

#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	char arr[] = "abcdefgh";
	fputs(arr,pf);
	fclose(pf);
	pf = NULL;
	return 0;
}

运行后我们打开data.txt文件 可以看到

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

我们如果再次将arr内容改为ccc运行后打开data.txt文件

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

我们还可以看到打开文件后光标都在最前面,而且原来的信息也没有了,那我们是不是可以理解为写入文件是将原来的文件的内容覆盖, 然后写入信息。

2.4fgets函数

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

        我们进入cplusplus网站fgets看到它的第一个参数是char *str是读取文件后存放在程序的变量,第二个参数int num是在文件中读取几个字符+1,第三个参数是流,返回值是char*,例如我们想读取文件中的abcdefg,详细代码如下:

#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	char arr[1006] ;
	char* p = arr;
	p = fgets(p, 7, pf);
	printf("%s", arr);
	fclose(pf);
	pf = NULL;
	return 0;
}

我们运行后可以看到

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

 对于为什么是7,原因很简单,fgets函数会在最后将数组的第num个位置转化为’\0‘,我们进入调试可以看到

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

2.5fprintf函数

 C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

        我们进入 cplusplus网站fprintf 查看fprintf函数的参数,看到这个函数你是不是会想到printf函数,我们同样查看printf函数的参数

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

我们可以看到他们两个只差流这个参数,fprintf函数是格式化输入文件,我们写一个代码来展示一下这个函数的功能,代码如下:

#include<stdio.h>
struct num {
	float s;
	int i;
	char s1[10];
}S;
int main(){
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	S = { 1.23f,10,"wo" };
	fprintf(pf, "%f-%d-%s", S.s, S.i, S.s1);
	fclose(pf);
	pf = NULL;
	return 0;
}

 我们运行程序后打开data.txt文件,可以看到

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

同样我们可以理解为将结构体S里面的内容,以  -  -  的形式输出到文件里。

2.6fscanf函数

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

         我们进入cplusplus网站fscanf查看fscanf函数的参数,看到fscanf函数我们很容易想到scanf函数,我们同样进入cplusplus网站查看scanf函数的参数,

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

我们可以看到这两个函数的参数只差了一个流, fscanf函数是将文件中有格式的信息储存在程序中定义的变量里,我们利用fprintf函数储存在文件的内容来初始化结构体S,详细代码如下:

#include<stdio.h>
struct num {
	float s;
	int i;
	char s1[10];
}S;
int main(){
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	fscanf(pf,"%f-%d-%s", &S.s, &S.i, &S.s1);
	printf("%f %d %s", S.s, S.i, S.s1);
	fclose(pf);
	pf = NULL;
	return 0;
}

我们运行代码,可以看到

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

2.7sprintf函数与sscanf函数

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

        sprintf函数是将数据以字符的形式存在s中, sscanf函数是将s的数据以字符的形式存在程序定义的变量中,我们写一个程序,代码如下:

#include<stdio.h>
struct num {
	int i;
	char arr;
	float f;
};
int main()
{
	struct num s = { 10,'c',1.2f};
	char arr[100] = { 0 };
	sprintf(arr, "%d%c%f", s.i, s.arr, s.f);
	struct num tmp = { 0 };
	sscanf(arr, "%d%c%f", &tmp.i, &tmp.arr, &tmp.f);
	printf("%d %c %f", tmp.i, tmp.arr, tmp.f);
	return 0;
}

运行结果如下:

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

2.8fwrite函数

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

        我们进入cplusplus网站fwrite的参数第一个参数是const void *ptr是指向的数据的地址,第二个参数size_t size是单个数据所占据的字节,第三个参数size_t count是要写进文件几个数据,第四个参数是流,特别注意这是以二进制的形式储存在文件中 ,我么们写一个代码展示一下函数的功能,代码如下:

#include<stdio.h>
struct num {
	int i;
	char arr[10];
	char brr[10];
};
int main()
{
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	struct num s = { 1,"abcd","efg" };
	fwrite(&s, sizeof(struct num), 1, pf);

	fclose(pf);
	pf = NULL;
	return 0;
}

我们运行代码后,打开data.txt文件可以看到:

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

由于是二进制的形式存储,所以有些信息我们不能识别。

2.9fread函数 

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

         我们进入cplusplus网站看fread的参数一个参数是const void *ptr是要读取文件信息保存到,第二个参数size_t size是单个数据所占据的字节,第三个参数size_t count是要写进文件几个数据,第四个参数是流,我们读取上个函数的内容,代码如下:

#include<stdio.h>
struct num {
	int i;
	char arr[10];
	char brr[10];
};
int main()
{
	FILE* pf = fopen("data.txt", "r ");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	struct num s;
	fread(&s, sizeof(struct num), 1, pf);
	printf("%d\n%s\n%s", s.i, s.arr, s.brr);
	fclose(pf);
	pf = NULL;
	return 0;
}

运行程序后可以看到

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

3.通讯录的改进

在程序中加入函数

void init(Struct* pc)
{
	assert(pc);
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
	while (fread(pc->arr + pc->i , sizeof(struct xinxi), 1, pf))
	{		
		pc->i++;
		addnum(pc);
	}
	fclose(pf);
	pf = NULL;
}

以及函数

void save(Struct* pc)
{
	assert(pc);
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fclose");
		return;
	}
	int i;
	for (i = 0; i < pc->i; i++)
	{
		fwrite(pc->arr + i, sizeof(struct xinxi), 1, pf);
	}
	fclose(pf);
	pf = NULL;
}

4.文件的随机读写

4.1fseek函数

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

根据文件指针的位置和偏移量来定位文件指针,第一个参数是流,第二个参数是偏移量v,第三个参数是相对位置,SEEK_SET是对于最初的位置,SEEK_CUR是对现在的位置,SEEK_END是对最后一位的位置。

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

 我们写一个代码,如下:

#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "r ");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	int ch;
	ch = fgetc(pf);
	printf("%c", ch);//a
	ch = fgetc(pf);
	printf("%c", ch);//b
	ch = fgetc(pf);
	printf("%c", ch);//c
	fseek(pf, -3, SEEK_CUR);
	ch = fgetc(pf);
	printf("%c", ch);//a
	fclose(pf);
	pf = NULL;
	return 0;
}

运行后为

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

这个函数有一定的局限性,我们必须对文件的内容非常熟悉,否则不容易输出我们想要的值。

4.2ftell函数

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

这个函数是计算相对于初始位置的偏移量 ,我们可以写一个代码,如下:

#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "r ");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	fseek(pf, 0, SEEK_END);
	size_t sz = ftell(pf);
	printf("%d", sz);
	fclose(pf);
	pf = NULL;
	return 0;
}

运行结果为

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

4.3rewind函数

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

函数的功能是让指针指向初始位置,我们写一个代码,来展示一下它的功能:

#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "r ");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	fseek(pf, -1, SEEK_END);
	int ch;
	ch = fgetc(pf);
	printf("%c\n", ch);
	rewind(pf);
	ch = fgetc(pf);
	printf("%c\n", ch);
	fclose(pf);
	pf = NULL;
	return 0;
}

运行结果为

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

文件的内容为

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学),C语言进阶,c语言

 5.总结

        今天主要包括将数据传入文件的函数,以及将文件中的内容传到程序中的函数,还有一些对于文件中的指针以及偏移量的函数fseek函数,ftell函数,rewind函数的讲解,异界对通讯录的改造.今天的内容就结束了。文章来源地址https://www.toymoban.com/news/detail-713447.html

到了这里,关于C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】通讯录管理系统(保姆级教程+内含源码)

    目录 C系列文章目录 前言 一,模块化编程 二,系统框架构建 1.成员信息的创建 2.菜单实现 3.系统功能声明 三、系统功能实现 1.初始化通讯录 2.增加联系人 3.显示所有联系人 4.根据姓名查找位置 5.删除指定联系人 6.查找指定联系人 7.修改指定联系人 8.清空所有联系人 9.按照名

    2024年02月08日
    浏览(42)
  • 【C语言】——动态内存管理与文件操作,后面加一个通讯录福利,万字解读,看完你会有一个全新认识

    目录 一.动态内存管理 1.为什么有动态内存管理 2.malloc和free  2.calloc和realloc 3.柔性数组 二.文件操作 1.为什么使用文件  2.二进制文件和文本文件  3.文件的打开和关闭 4.文件的顺序读写 5.文件缓冲区 三.通讯录  1.预处理  2.基本框架 3.初始化函数 4.增加联系人  5.显示联系人

    2024年03月13日
    浏览(39)
  • 【C语言】通讯录(文件) -- 详解

    前面介绍了 【C语言】静态通讯录 -- 详解_炫酷的伊莉娜的博客-CSDN博客 和 【C语言】动态通讯录 -- 详解_炫酷的伊莉娜的博客-CSDN博客 。当通讯录运行起来时,可以对通讯录中的数据进行增加、删除或修改等。此时数据是存放在内存中,当程序退出时,通讯录中的数据自然就

    2024年02月12日
    浏览(41)
  • C语言实现通讯录(文件版)

    学习完C语言的文件读写,我们又可以将通讯录增加以下功能: 1.当退出通讯录的时候,把已增加的联系人信息写到文件中。 2.当通讯录初始化的时候,加载(读取)文件里的信息到通讯录 ——(直接使用打印函数可以显示在屏幕上) 分析: 当我们退出通讯录的时候要实现通讯录

    2024年02月01日
    浏览(37)
  • 【C语言】实现通讯录(动态+文件)

    在之前三子棋和扫雷的基础上,本篇文章博主将给大家逐步分析实现通讯录,介绍通讯录的每个功能( 动态增长和文件保存 )。 —————————————————————— test.c - 测试通讯录 Contact.c - 函数的实现 Contact.h - 函数和类型的声明 以多文件的形式分模块写的

    2024年02月13日
    浏览(57)
  • 通讯录文件如何导入手机简单方法

    今天要和大家分享的是,如何将通讯录文件导入华为手机。最简单的方法是直接通过微信或QQ将通讯录文件传输到手机之上,而不需要使用第三方工具。。 通讯录文件指的是vCard文件,也称为vcf文件。通常是手机和通讯录工具导出的文件。可以很方便地导入到其他手机之上。

    2024年02月16日
    浏览(44)
  • C语言——通讯录详解(文件版)

    我们已经掌握了通讯录的静态版和动态版,下面我们将学习通讯录的文件版。学习了文件版,我们就不用担心退出程序后,已经添加的联系人清空了。在以前的通讯录(通讯录静态版、通讯录动态版)基础上,我们在完成两个目标就可以实现通讯录文件版。 目标: 通讯录退

    2024年02月09日
    浏览(37)
  • 通讯录(静态版+动态版+文件版)

    本期带大家一起来学习一下通讯录的三个版本(静态版+动态版+文件版)🌈🌈🌈 使用VS2022编译器进行编译 test.c文件实现整个框架,contact.c文件实现整个通讯录的具体功能,contact.h文件实现整个通讯录需要的声明和头文件 🍖 🦴 从现在基本流行的通信录中 发现几个必备的信

    2023年04月11日
    浏览(40)
  • 通讯录详解(静态版,动态版,文件版)

    💓博客主页:江池俊的博客 ⏩收录专栏:C语言进阶之路 👉专栏推荐:✅C语言初阶之路 ✅数据结构探索✅C语言刷题专栏 💻代码仓库:江池俊的代码仓库 🎉欢迎大家点赞👍评论📝收藏⭐ 前言 在现代社会中,通讯录已经成为了我们生活中不可或缺的一部分。无论是工作还

    2024年02月05日
    浏览(47)
  • c语言:通讯录管理系统(文件版本)

    前言: 本通讯录管理系统一共三个版本,除此文章以外还有如下俩个版本,大家可以根据需求自取: 基础增删查改功能版本 :c语言:通讯录管理系统(增删查改)-CSDN博客 动态分配内存版本 :c语言:通讯录管理系统(动态分配内存版)-CSDN博客         本文是在基础的通

    2024年02月07日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包