文件的操作

  本期我带大家引入一个点c语言中文件操作,本期会介绍操作中的读写函数以及一些比较特殊的函数sscanf sprintf 这些有趣的函数希望大家可以看看增加自己的编码能力,里面有详细的代码案例帮助你理解,对于一些不准确的地方希望大家可以给出指点,谢谢!!!

程序文件和数据文件

例如: . C 文件 和 .obj .exe .分别为源文件 widows系统下的目标文件和可执行程序文件

   数据文件可能是我们程序运行时候我们读或者写的数据或者我们输出

的数据到,以及我们读入的数据

一.导入

   下面我们学习的是如何将数据文件的输入和输出,以前学的是将数据从终端的键盘中

输入数据然后将数据输出到显示器上,问你有时候会将读取的数据输出到磁盘中的内存去 换句话说我们可以从磁盘中读取文件,然后把文件放入程序中,然后将文件输出到stdout(标准输出)或者输出到电脑的磁盘中。

二.文件类型

根据数据的组织形式,数据文件被称为文本文件或者二进制文件。

数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。

   废话不少说我们先学习这些工具,如何实现这些功能,然后我们在说说如何解释这些功能

内部的原理

打开方式

选取好模式和功能了那么接下来学习一下创建文件指针吧

#defineGETC() getchar()

举例说明

格式化输入函数,指定读取的数据的格式,然后把读取到的数据放入指定格式的变量中去

    写法跟scanf的区别就是加了一个文件指针的而已  如下 我们创建文件指针之后还创建一个浮点型变量和字符型的数组。后我们将一个浮点型的数据和字符串数据通过fprintf格式化输出到文件流中,然后在用fsccanf 把文件流中的数据格式化输出到这个浮点型变量和字符型数组中.

二进制数据的输入和输出

存放读取到的文件指针

fprintf 和 printf 都是用于将数据输出到某个目标(例如,屏幕或文件)的函数,但它们不涉及直接操作内存缓冲区的概念。具体来说:

  • printf 默认输出到标准输出流 stdout,通常是控制台或终端。
  • fprintf 允许指定一个输出目标,例如 stdout 或者一个文件流。

它们在内部可能使用了缓冲机制来提高效率(即不每次输出一行就立即写入,而是积累一部分数据后再输出),但从编程的角度来看,这些缓冲区是由 C 标准库处理的,你不需要手动管理它们。

相比之下,freadfwrite 是用于从文件中读取数据和将数据写入文件的函数。这些函数需要一个指定的内存缓冲区来存储读取的数据,或提供数据来源来写入。

因此,当你使用 printf 或 fprintf 时,你只需指定要输出的数据和目标,但不需要担心内存缓冲区。而当你使用 fread 或 fwrite 时,你必须提供一个内存缓冲区来存储数据或提供数据。

特别注意到这串代码无法实现是因为这里的stdout 是一个文件指针 而不是一个存放内存的文件缓冲区 所以无法使用

然后当使用完或者内存结束后内存会还给系统

如果你希望从一串数字中每次读取两个数字,你可以在格式字符串中指定相应的格式。假设你的数字串是"123456",你想每次读取两个数字,可以这样做:

有时候用rewind 直接将文件指针回到开头

fgets() 函数在成功读取到数据时会返回读取的字符串的指针,即指向读取到的字符串的首地址。如果到达文件末尾或者发生了读取错误,则返回 NULL。

这意味着在循环中使用 fgets() 时,可以通过检查其返回值来确定是否已经读取到了文件的末尾或者是否发生了读取错误。如果返回的是 NULL,那么就表示已经到达文件末尾或者发生了错误,循环应该结束。

fgetc() 函数用于从文件流中读取一个字符,并返回读取到的字符作为 unsigned char 类型的整数。如果到达文件末尾或者发生了读取错误,则返回特殊值 EOF,通常被定义为 -1。

因此,在使用 fgetc() 函数时,可以通过检查返回值来确定是否已经读取到了文件的末尾或者是否发生了读取错误。如果返回的是 EOF,那么就表示已经到达文件末尾或者发生了错误,需要结束读取.

"I/O" 是 Input/Output(输入/输出)的缩写。在计算机领域中,"I/O" 表示数据在计算机系统内部和外部设备之间进行输入和输出的过程。这包括从键盘、鼠标、磁盘驱动器、网络连接等外部设备读取数据(输入),以及将数据发送到显示器、打印机、磁盘驱动器、网络连接等外部设备(输出)。

在你提供的代码中,"I/O error" 指的是在读取文件时发生的错误,可能是由于文件不存在、权限不足、文件损坏等原因引起的错误。这种错误会影响程序正确执行,因此需要进行处理。

如果是因为读取错误 ferror返回非0值

  本期的介绍就到这里感谢大家的观看谢谢大家的指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值