文件的介绍3【fputc、fgetc、fgets、fwrite、fread、printf\fprintf\sprintf\scanf\fscanf\sscanf】

目录

一、文件的顺序读写

1.顺序读写函数

(1)fputc

(2)fgetc

(3)fputs

(4)fgets

(5)fwrite

(6)fread

(7) printf 、fprintf 、 sprintf

printf与fprintf

 printf与sprintf 

返回值总结

(8)scanf、fscanf、sscanf

scanf与fscanf

scanf与sscanf 

 返回值总结


一、文件的顺序读写

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 所指的字符串中,提取格式化的数据到相应的变量中去

 返回值总结
  • scanffscanfsscanf的返回值都表示成功读取并赋值的输入项的数量。
  • 返回值为正整数时表示成功读取了相应数量的输入项。
  • 返回值为0时表示没有读取到任何数据或输入不匹配。
  • scanffscanf在输入流结束时可能返回EOF,而sscanf不会返回EOF。

在实际编程中,应该根据这些函数的返回值来判断输入是否成功,并据此进行相应的错误处理。

例如:只有当读取正确数量的输入项后才进行输出

点赞+关注 ,下期我们讲 文件的随机读取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值