目录
一、文件的顺序读写
1.顺序读写函数
让我来一 一介绍
-------------------------------------------------------------------------------------------------------------------
(1)fputc
I 第一个参数 是 要输出的字符 ,第二个参数 是一个指向 已经被打开的文件流 的 指针
串起来就是: 通过文件指针 stream ,找到文件并实现相应字符的输出
II fputc
函数返回写入字符的 ASCII 码(无符号字符转换为 int
类型),如果发生错误,则返回 EOF
(通常定义为 -1,但具体值依赖于实现)。
具体操作:
-------------------------------------------------------------------------------------------------------------------
(2)fgetc
I 传入的参数 是一个指向 已经被打开的文件流 的指针
串起来就是: 通过文件指针 stream ,找到文件并开始顺序读取字符
II fgetc
函数从指定的文件流中读取下一个字符,并将其作为无符号字符返回(转换为 int
类型,以区分可能的错误返回值 EOF
)。如果到达文件末尾或发生读取错误,fgetc
将返回 EOF
。
这说明了 fgetc 函数调用一次后,再次调用时 它会从上次读取的字符之后 继续 进行 读的操作
即 先读到 e ,再 直接 读到 x
-------------------------------------------------------------------------------------------------------------------
(3)fputs
I 第一个参数是一个指向 一个字符串(包含'\0')的 指针 ,第二个参数 是指向一个 已经被打开的文件流 的指针
串起来就是: 通过文件指针 stream ,找到文件并完成相应字符串的输出
II fputs
函数将字符串 str
写入到指定的文件流 stream
中,但不包括空字符 \0
。如果成功写入字符串,函数返回一个非负值(具体值依赖于实现,但通常可以忽略)。如果发生错误,则返回 EOF
(通常定义为 -1)。
说明fputs
函数不会自动在字符串末尾添加换行符。如果需要在字符串后换行,可以在字符串中包含 \n
字符
-------------------------------------------------------------------------------------------------------------------
(4)fgets
I 参数
从左往右传入的第一个参数是一个 指向字符串的指针,
第二个参数用于 指定最多读取的字符数(包括结尾的空字符 \0
),意思是 如果你传的是 5
那它只会读取4个字符,并自动在后面添加一个'\0'
第三个参数是一个指向 已经被打开的文件流的指针
串起来就是: 通过文件指针 stream ,找到文件并从中读取 num 个字符放到 str 所指向的字符串中
II 返回值
- 成功时,
fgets
返回str
指针。 - 如果到达文件末尾(EOF)或发生错误,返回
NULL
。
III 工作原理
fgets
从指定的文件流stream
中读取字符,直到遇到换行符\n
、文件末尾(EOF)或已读取n-1
个字符为止(不包括结尾的空字符\0
)。- 读取的字符(包括换行符,如果有的话)被存储在
str
指向的字符数组中。 - 在字符串的末尾自动添加一个空字符
\0
,以标识字符串的结束。 - 读取完一行之后,如果再使用 fgets 函数,那么它将读取下一行
、
遇到换行符 \n 读取结束,所以只读到3个字符
-------------------------------------------------------------------------------------------------------------------
(5)fwrite
I 从左往右传入的
第一个参数是一个 指向待写入的数据块 的指针
第二个参数是 写入的每个数据项的大小, 单位是字节
第三个参数是 写入数据项的个数
第四个参数是一个 指向已经被打开的文件流 的指针
II 返回值表示成功写入的数据项的个数
III 串起来就是:fwrite
函数从 ptr
指向的数据块中读取 count
个数据项,每个数据项的大小为 size
字节,并将这些数据项写入到 stream
指定的文件流中。写入操作从文件流的当前位置开始,并更新文件流的位置指示器以反映写入的字节数。
-------------------------------------------------------------------------------------------------------------------------------
(6)fread
I 从左往右
第一个参数是一个 指向内存块 的指针,fread
将从文件中读取的数据存储到这个内存块中。
第二个参数是 每个数据项的大小, 单位是字节
第三个参数是 要读取的数据项的数量
第四个参数是一个 指向已经被打开的文件流 的指针
II 返回值是成功读取的数据项的个数
III 串起来就是:
通过文件指针找到文件,然后将 count 个大小为 size 的数据项 存储到 ptr 所指的内存块中去
---------------------------------------------------------------------------------------------------------------------------------
(7) printf 、fprintf 、 sprintf
printf与fprintf
不难发现, printf 和 fprintf 参数只差一个stream指针, 而stream 可以是 stdout 所以fprintf 包含printf , 具体就是fprintf 可以输出的范围更广泛
下面展示的是:分别在终端和文件中实现输出
-------------------------------------------------------------------------------------------------------------------------
printf与sprintf
不难发现, printf 和 sprintf 参数只差一个 str 指针
意思就是将格式化的数据写到 str 所指的字符串中
返回值总结
sprintf
:返回写入到缓冲区中的字符串的长度(不包括\0
),通常不用于错误处理。printf
:返回成功写入的字符总数(不包括终止的空字符),在极少数情况下可能返回负值表示错误。fprintf
:返回成功输出的字符数(不包括终止的空字符),在发生错误时返回负值。
---------------------------------------------------------------------------------------------------------------------
(8)scanf、fscanf、sscanf
scanf与fscanf
了解了 printf 与 fprintf 的特点之后, 类似的 fscanf 也 包含 scanf 的功能 ,只需要 stream 是 stdin
以下是在终端和文件中的读取操作:
文件中存放的是0
--------------------------------------------------------------------------------------------------------------------
scanf与sscanf
sscanf 多传入 一个指针, 功能是 从 s 所指的字符串中,提取格式化的数据到相应的变量中去
返回值总结
scanf
、fscanf
和sscanf
的返回值都表示成功读取并赋值的输入项的数量。- 返回值为正整数时表示成功读取了相应数量的输入项。
- 返回值为0时表示没有读取到任何数据或输入不匹配。
scanf
和fscanf
在输入流结束时可能返回EOF,而sscanf
不会返回EOF。
在实际编程中,应该根据这些函数的返回值来判断输入是否成功,并据此进行相应的错误处理。
例如:只有当读取正确数量的输入项后才进行输出
点赞+关注 ,下期我们讲 文件的随机读取