C语言文件操作详情(二)

目录
  • 前言
  • 一、文件的顺序读写函数
    • fgetc和fputc
    • fgets和fputs
    • fscanf 和 fprintf
    • 对比一组函数
    • fraed 和 fwriite
  • 二、文件的随机读写函数
    • fseek 函数
  • 三、关于文件结束的判定
  • 总结

前言

接上一篇 C语言文件操作详情(一)

一、文件的顺序读写函数

fgetc和fputc

  • fgetc
    字符输入函数 适用于所有输入流
  • fputc
    字符输出函数 适用于所有输出流
int fgetc( FILE *stream );
int fputc( int c, FILE *stream );
  • fputc 写文件
int main()
{
	FILE* pfWrite = fopen("test.txt", "w");
	if (pfWrite == NULL)//检验
	{
		printf("%s\n", strerror(errno));//如果写文件错误打印错误原因
		return 0;
	}
	//写文件
	fputc("a", pfWrite);
	fputc("b", pfWrite);
	fputc("c", pfWrite);
	//关闭文件
	fclose(pfWrite);
	pfWrite == NULL;
	return 0;
}
  • fgetc 读文件
int main()
{
	FILE* pfRead = fopen("test.txt", "r");
	if (pfRead == NULL)
	{
		printf("%s\n", strerror(errno));
		return 0;
	}
	//读文件
	printf("%s", fgetc(pfRead));//a
	printf("%s", fgetc(pfRead));//b
	printf("%s", fgetc(pfRead));//c
	//关闭文件
	fclose(pfRead);
	pfRead == NULL;
	return 0;
}

fgets和fputs

  • fges 文本行输入函数 适用于所有输入流
  • fputs 文本行输入函数 适用于所有输出流

两个函数的功能:

//Get a string from a stream. 从流中获取字符串。
char *fgets(char *string, int n, FILE *stream);
//Write a string to a stream. 将字符串写入流。
int fputs(const char *string, FILE *stream);

用fgets函数读取一行:

int main()
{
	char buff[100] = { 0 };
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		return 0;
	}
	//读文件
	fgets(buff, 100, pf);
	printf("%s", buff); //注意buff里面本身就有一个换行符 (文件里面末尾有换行符)
	//打开成功,读文件,关闭文件
	fclose(pf);
	pf == NULL;
	return 0;
}

读取一行打印到显示器上 如图:

用fputs函数写一行:

int main()
{
	char buff[100] = { 0 };
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
		return 0;
	}
	//写文件
	fputs("hello\n", pf);
	fputs("word\n", pf);
	//打开成功,写文件,关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

用fputs 写一行到文件里面:如下:

fgets和fputs也可以操作键盘和屏

键盘输入abcd 回车 屏幕打印 abcd

fscanf 和 fprintf

  • fscanf 格式化输入函数 适用于所有输入流
  • fprintf 格式化输出函数 适用于所有输出流

简单对比 scanf 和 fscanf,printf 和 fprintf,用法都非常相似

int scanf( const char *format [,argument]... );
int fscanf( FILE *stream, const char *format [, argument ]... );
int printf( const char *format [, argument]... );
int fprintf( FILE *stream, const char *format [, argument ]...);

fprintf 写文件

struct S
{
	int n;
	float score;
	char arr[10];
};
int main()
{
	struct S s = { 100, 3.14, "abc" };
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
		return 0;
	}
	//格式化的形式写文件
	fprintf(pf, "%d %f %s", s.n, s.score, s.arr);
	fclose(pf);
	pf = NULL;
	return 0;
}

fscanf 读文件

struct S
{
	int n;
	float score;
	char arr[10];
};
int main()
{
	struct S s = { 100, 3.14, "abc" };
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
		return 0;
	}
	//格式化的形式输入数据
	fscanf(pf, "%d %f %s", s.n, s.score, s.arr);
	fclose(pf);
	pf = NULL;
	return 0;
}

当然fscanf和fprintf函数同样可以运用于标准的输入输出流(stdin,stdout)

对比一组函数

  • scanf/fscanf/sscanf
  • ptintf/fprintf/sprintf

scanf/printf:是针对标准输入流/标准输出流的 格式化输入/输出语句
fscnaf/fprintf:是针对所有输入流/所有输出流的 格式化输入/输出语句
sscanf/sprintfsscanf是从字符串中读取格式化的数据。sprintf是把格式化数据输出成(存储到)字符串

fraed 和 fwriite

  • fread 二进制输入函数 适用于 文件
  • fwrite 二进制输出函数 适用于 文件
size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
struct S{
	char name[20];
	int age;
	double score;
};
int main()
{
	struct S s = { "张三", 20, 55.6 };
	FILE* pf = fopen("test.txt", "wb");
	if (pf == NULL)
	{
		return 0;
	}
	//二进制形式写文件
	fwrite(&s, sizeof(struct S), 1, pf);
	fclose(pf);
	pf = NULL;
	return 0;
}

fread 读文件 ,fwrite 写文件 。两个函数用法类似

二、文件的随机读写函数

前面介绍的函数都是顺序读写函数 ,有时候我们需要从某一个位置开始读写函数。下面的这些函数可以实现其功能。

fseek 函数

根据文件指针的位置和偏移量来定位文件指针

Moves the file pointer to a specified location.
int fseek( FILE *stream, long offset, int origin );
//三个参数所指的内容:pf    偏移量     文件指针的当前位置
int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		return 0;
	}
	//定位文件指针
	fseek(pf,2,SEEK_CUR);//偏移量为2
	//读取文件
	int ch = fgetc(pf);
	prinf("%c\n",ch);
	fclose(pf);
	pf = NULL;
	return 0;
}

如图从文件指针的当前位置 a 前面开始偏移量为2,打印c

  • SEEK_CUR
    Current position of file pointer (文件指针的当前位置)
  • SEEK_END (文件的末尾位置)
    End of file
  • SEEK_SET (文件起始位置)
    Beginning of file

三、关于文件结束的判定

我们知道:EOF --> end of file 文件结束的标志
如果一个文件里面什么都没有我们打开文件读到的就是 “-1”,文件结束的位置有一个EOF存在。

feof函数

  • 牢记:在文件读取过程中,不能用feof函数的返回值直接来判定文件的是否结束。
    而是应用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件尾EOF使文件结束。
  • 文本文件是否读取结束,判断返回值是否为EOF或则NULL
    例如:fgetc判断是否为EOF fgets判断返回值是否为NULL
  • 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数
    例如:fread 判断返回值是否小于实际要读的个数

总结

到此这篇关于C语言文件操作详情(二)的文章就介绍到这了,更多相关C语言文件操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

    目录 一.文件的顺序读写 1.格式化的输出函数(fprintf) 2.格式化的输入函数(fscanf) 3.二进制读写 1.二进制输出函数(fwrite) 2.二进制输入函数 3.scanf,fscanf,sscanf.printf,fprintf,sprintf的区别 二.文件的随机读写 1.fseek函数 2.ftell函数 3.rewind函数 三.被错误使用的feof 总结 一.文件的顺序读写 兄弟们,上一章只介绍到了如何把单个的字符或者字符串如何写到文件里或者从文件中读取,文件的顺序读

  • C语言常见的文件操作函数

    目录 一.文件的打开和关闭 1.文件指针 2.文件打开和关闭 二.文件的顺序读写 1.fgetc()和fputc()函数 2.fgets()和fputs()函数 3.fscanf()和fprintf()函数 4.fread()和fwrite()函数 三.文件的随机读写 1.fseek函数 2.ftell函数 3.rewind函数 四.文本文件和二进制文件 五.文件读取结束的判定 六.文件缓冲区 总结 一.文件的打开和关闭 1.文件指针 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存

  • C语言关于文件的操作方法总结

    目录 什么是文件 程序文件 数据文件 文件名 为什么要使用文件 文件的操作 文件缓冲区 文件指针(FILE) 文件的打开和关闭 fopen fclose 文件的打开方式 流的相关概念 文件的顺序读写 fputc fgets 什么是文件 程序文件 其实从文件的功能的角度来说:我们的文件可以分为两种类型的文件:程序文件和数据文件. 就拿我们C语言的程序为例子,包括了程序文件,即后缀为.c的文件:目标文件,即在windows环境下后缀为.obj的文件:可执行程序文件,即后缀为.exe的文件. 数据文件

  • C语言超详细讲解文件的操作

    目录 一.为什么使用文件 二.什么是文件 1.程序文件 2.数据文件 3.文件名 三.文件指针 四.文件的打开和关闭 五.文件的顺序读写 六.文件的随机读写 fseek ftell rewind 七.文件结束判定 一.为什么使用文件 当我们写一些项目的时候,我们应该要把写的数据存储起来.只有我们自己选择删除数据的时候,数据才不复存在.这就涉及到了数据的持久化的问题,为我们一般数据持久化的方法有,把数据存在磁盘文件.存放到数据库等方式.使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久

  • C语言由浅入深讲解文件的操作上篇

    目录 为什么使用文件 什么是文件 文件名 关于文件的一些概念 文件函数 fopen fclose 实例代码 绝对路径 文件的打开方式 文件操作流程 为什么使用文件 前面写的通讯录,增加人数退出程序后,数据就会消失.此时数据是存放在内存中,下次运行通讯录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受. 所以文件操作就应运而生.数据持久化的方法有两种:1.把数据存放在磁盘文件2.存放到数据库使用文件我们们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化. 什么是文件 但是在程序设计中

  • C语言文件操作详情(一)

    目录 前言: 一.文件是什么 二.文件类型 三.文件缓冲区 四.文件指针 五.文件的打开和关闭 前言: 文件操作重要吗? 当然重要:如果我们想让自己的程序拥有记忆功能,那就需要把要记忆的信息和数据存入到一个外部文件里,以便下次提取. 一.文件是什么 磁盘上的文件是文件.但在程序设计中,我们一般谈的文件有两种:程序文件.数据文件 程序文件:包括源程序文件(后缀 .c),目标文件(后缀 .obj)可执行程序(windows环境后缀为 .exe). 数据文件:文件的内容不一定是程序,而是程序运行时读写

  • C语言实现银行管理系统(文件操作)

    本文实例为大家分享了C语言实现银行管理系统的具体代码,供大家参考,具体内容如下 银行管理系统主要有五个模块组成: 1.查询账户信息2.存钱3.取款4.转账5.退出系统 测试文件:(首先在cpp文件所在目录下添加这个文件,运行程序会自动添加文件,但是需要输入这些数据) 代码: #include<stdio.h>    /*I/O函数*/ #include<stdlib.h>  /*其它说明*/ #include<string.h>  /*字符串函数*/ #define m

  • C语言文件操作详情(二)

    目录 前言 一.文件的顺序读写函数 fgetc和fputc fgets和fputs fscanf 和 fprintf 对比一组函数 fraed 和 fwriite 二.文件的随机读写函数 fseek 函数 三.关于文件结束的判定 总结 前言 接上一篇 C语言文件操作详情(一) 一.文件的顺序读写函数 fgetc和fputc fgetc字符输入函数 适用于所有输入流 fputc字符输出函数 适用于所有输出流 int fgetc( FILE *stream ); int fputc( int c,

  • C语言 文件操作解析详解及实例代码

    C语言文件操作解析 在文件操作中除了打开操作以及读写操作,还有几种比较常见的操作.下面介绍一下这些操作中涉及到的函数. 一.移动位置指针的函数 rewind函数和fseek函数,这两个函数的原型是: void rewind(FILE *fp);     将位置指针移动到文件首 int fseek(FILE *fp,long int offset,int origin);   将位置指针移动到距离origin的offset字节数的位置 其中对于fseek函数中的参数,origin为起始点,offs

  • C语言文件操作的入门详解教程

    一.一些需要掌握的知识点 文件有千千万万,但是在我们的程序设计当中,我们谈的文件一般有两种: 1.程序文件 包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe). 2.数据文件 文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件. 而在本节中,我们主要提到的是数据文件. 1.文件名 我们知道,名字都是用来标识和区别事物的,那么文件名也是这样,是区别各个文件的标识. 一个文件

  • C语言文件操作零基础新手入门保姆级教程

    目录 一.前言 二.文件操作基础知识 ①什么是文件 ②数据文件类型 ③数据如何存储 ④如何读取二进制文件 ⑤什么是文件名 ⑥文件缓冲区 ⑦文件指针 三.文件操作函数 ①fopen 与 fclose ②fputc与fgetc ③fputs与fgets ④fprintf与fscanf ⑤fwrite与fread ⑥fseek与ftell与rewind ⑦ferror与feof ⑧补充函数 sscanf sprintf ⑨补充函数perror  strerror 总结 一.前言 我们如何使我们设计的程

  • Python函数和文件操作详情

    目录 前言 一.函数 二.自定义函数 1.创建函数 2.调用函数 3.函数默认值 4.收集函数(可变函数) 5.全局与局部 6.匿名函数lambda 7.内嵌函数 三.常用内置函数 1.max和min 2.abs 3.round 4.pow 5.divmod 6.help 7.filter 8.map 四.文件 1.read()方法读取 2.readline()方法 3.readlines()方法 4.遍历文件对象读取 5.文件的写入 6.文件关闭 7.with方式 8.pickle 前言 本篇

  • C语言文件操作详解以及详细步骤

    目录 一.为什么使用文件? 二.什么是文件? 1.程序文件 2.数据文件 3.文件名 三.文件的打开和关闭 1.文件指针 2.文件的打开和关闭 4.文件的顺序读写 四.fseek函数 五.ftell函数 六.rewind函数 七.文本文件和二进制文件 八.文件读取结束的判定 1.feof函数的错误使用 九.文件缓冲区 总结 一.为什么使用文件? 当我们在编写一个项目的时候,自然而然想到要把之前写入的数据保存起来.而只有我们自己选择删除数据的时候,数据才不复存在.这就涉及到了数据持久化的问题,我们

  • C语言文件操作之fread函数详解

    目录 前言 一.fread 函数 二.缓冲区受限的情况 ( 循环读取文件 | feof 函数判定文件读取完毕 ) 三.处理乱码问题 四.记录读取的字节个数 五.读取到 0 字节的情况 六.读取完毕的情况 七.读取文本文件 “\n” 与 读取二进制文件 “\r\n” 区别 总结 前言 二进制文件读写两个重要的函数 , fread 和 fwrite , fread 用于读取文件 , fwrite 用于写出文件 ; fread / fwrite 函数 既可以操作 二进制文件 , 又可以操作 文本文件

  • Python函数进阶与文件操作详情

    目录 一.作业回顾 1.格式化输出与%百分号 2.字符串切片 3.字典的定义 二.引用变量与可变.非可变类型 1.引用变量 聊聊变量在内存底层的存储形式 如何验证Python中变量的引用关系 把一个变量赋予给另外一个变量的影响 2.Python中可变和非可变数据类型 问题1:在Python中一共有几种数据类型? 问题2:如何判断一个数据类型是可变类型还是非可变类型? 3.可变类型与非可变类型在函数中的应用 可变类型 不可变类型 三.函数递归(重点难点) 1.前言 2.递推算法 3.什么是递归算法

  • Go语言文件操作的方法

    本文实例讲述了Go语言文件操作的方法.分享给大家供大家参考.具体如下: 关闭文件: 复制代码 代码如下: func (file *File) Close() os.Error {     if file == nil {         return os.EINVAL     }     e := syscall.Close(file.fd)     file.fd = -1 // so it can't be closed again     if e != 0 {         retu

随机推荐