前言:

上一次我们说了c语言的操作符 内存函数 扩容函数,这一期我们开始讲解c语言的文件操作及其关键字

文件操作:
 

一、操作方式

C 语言对文件的操作遵循 “打开 - 读写 - 关闭” 的流程:

  • 打开文件:借助 fopen 函数,需指定文件名和打开模式(如 r 为只读、w 为只写等),函数会返回文件指针,用于后续操作。
  • 读写操作:通过一系列专门函数与文件交互,实现数据的读取或写入。
  • 关闭文件:使用 fclose 函数关闭文件,释放系统资源,这一步很关键,若省略可能导致数据丢失。

二、操作函数

C 语言提供了丰富的文件操作函数,覆盖不同场景:

  • 打开 / 关闭:fopen 负责打开文件,fclose 负责关闭文件。
  • 字符读写:fgetc 用于从文件读取单个字符,fputc 用于向文件写入单个字符。
  • 字符串读写:fgets 可读取文件中的字符串,fputs 能将字符串写入文件。
  • 格式化读写:fscanf 按指定格式从文件读取数据,fprintf 按指定格式向文件写入数据。
  • 二进制读写:fread 用于二进制形式读取文件数据,fwrite 用于二进制形式写入文件数据。
  • 位置控制:fseek 可移动文件内部指针位置,ftell 获取指针当前位置,rewind 把指针复位到文件开头。
  • 错误与状态检查:ferror 检查文件操作是否出错,feof 判断是否到达文件末尾,常配合循环进行读写操作。

三、模式参数

不同的打开模式决定了文件的操作权限和行为:

  • r:只读模式,要求文件必须存在,否则打开失败。
  • w:只写模式,文件不存在则创建新文件,若文件已存在则清空原有内容。
  • a:追加模式,在文件末尾进行写入操作,文件不存在则创建。
  • r+/w+/a+:读写模式,在 r、w、a 的基础上增加了读权限,其中 w+ 会清空文件。
  • 二进制增强:在基础模式后加 b,如 rb 表示二进制只读,wb 表示二进制只写,用于处理二进制文件(如图片、音频等)。

关键字:

存储类相关

  • auto:用于声明自动变量,是局部变量的默认存储类别,变量在进入作用域时创建,离开作用域时销毁,一般可省略不写。
  • static:
    • 修饰局部变量,使其成为静态局部变量,生命周期延长至程序运行结束,且只初始化一次。
    • 修饰全局变量或函数,限制其作用域为当前文件,避免被其他文件访问。
  • extern:声明外部变量或函数,表明该变量或函数在其他文件中定义,用于实现跨文件的变量和函数共享。
  • register:建议编译器将变量存储在寄存器中,以提高访问速度,但编译器不一定会采纳,且不能对用register声明的变量取地址。
  • typedef:为已有的数据类型定义别名,能增强代码的可读性和可维护性。

数据类型相关

  • char:字符类型,通常占用 1 个字节,可用来存储 ASCII 字符或小整数。
  • int:整数类型,用于存储整数,不同编译器下占用字节数可能不同,一般为 4 字节。
  • short:短整数类型,占用字节数比int少,通常为 2 字节,能表示的整数范围更小。
  • long:长整数类型,占用字节数比int多,通常为 4 或 8 字节,可表示更大范围的整数。
  • float:单精度浮点类型,占用 4 字节,用于存储小数,精度相对较低。
  • double:双精度浮点类型,占用 8 字节,精度比float高,适合对精度要求较高的小数存储。
  • signed:表示有符号类型,可存储正数、负数和 0,是整数类型的默认符号属性,可省略。
  • unsigned:表示无符号类型,只能存储非负数,相同字节数下,无符号类型能表示的正数范围比有符号类型大一倍。
  • void:表示 “无类型”,可用于:
    • 函数返回值类型,说明函数不返回任何值。
    • 函数参数列表,说明函数没有参数。
    • 指针类型,void*是通用指针,可指向任意类型的数据。
  • enum:用于定义枚举类型,将一组相关的常量命名,使代码更具可读性。
  • struct:用于定义结构体类型,可将不同类型的数据组合在一起,形成一个新的复合数据类型。
  • union:用于定义联合体(共用体)类型,其所有成员共享同一块内存空间,联合体的大小为其最大成员的大小。

控制语句相关

  • if/else:用于条件判断,if根据条件决定是否执行一段代码,else则在if条件不满足时执行另一段代码。
  • switch/case/default:switch用于多分支条件判断,根据表达式的值跳转到对应的case标签处执行代码;case用于标记分支;default用于处理所有case都不匹配的情况。
  • for:用于循环结构,可指定循环的初始化、条件和更新操作,适合已知循环次数的场景。
  • while/do-while:
    • while先判断条件,条件满足时执行循环体,可能一次都不执行。
    • do-while先执行循环体,再判断条件,至少执行一次循环体。
  • break:用于跳出当前所在的循环(for、while、do-while)或switch语句。
  • continue:用于跳过当前循环体中剩余的代码,直接进入下一次循环的条件判断。
  • goto:可无条件跳转到函数内的指定标签处执行代码,但容易导致代码逻辑混乱,一般不推荐使用。
  • return:用于从函数中返回,可带回一个返回值(如果函数有返回类型),也可用于提前结束函数执行。

其他

  • const:用于声明常量,表明变量的值在初始化后不能被修改。
  • sizeof:是一个运算符,用于计算数据类型或变量所占用的字节数。
  • volatile:用于告诉编译器,变量的值可能会被意外地改变(如被硬件或其他线程修改),防止编译器对该变量的优化,确保每次都从内存中读取其值。

小杨在此预祝各位飞黄腾达!

感谢浏览!

更多推荐