文件

 

在线C环境:https://clin.icourse163.org/

 

 

格式化输⼊输出

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. printf和scanf的返回值

 

  • 读⼊的项目数
  • 输出的字符数
  • 在要求严格的程序中,应该判断每次调⽤scanf或 printf的返回值,从⽽了解程序运⾏中是否存在问题

 

 

3. ⽂件输⼊输出

⽤>和<做重定向

 

4. 输⼊结束

getchar读到了EOF

scanf返回⼩于要求读的数量

 

 

5. FILE

FILE* fopen(const char * restrict path, const char * restrict mode);

int fclose(FILE *stream);

fscanf(FILE*, ...)

fprintf(FILE*, ...)

 

6.打开⽂件的标准代码

 

 

7. fopen

 

 

 

 

8.  ⼆进制⽂件

  • 其实所有的⽂件最终都是⼆进制的
  • ⽂本⽂件⽆⾮是⽤最简单的⽅式可以读写的⽂件
  1. more、tail
  2. cat
  3. vi
  • ⽽⼆进制⽂件是需要专⻔的程序来读写的⽂件
  • ⽂本⽂件的输⼊输出是格式化,可能经过转码

 

 

 

9.⽂本 vs ⼆进制

  • Unix喜欢⽤⽂本⽂件来做数据存储和程序配置
  1. 交互式终端的出现使得⼈们喜欢⽤⽂本和计算机 “talk”
  2. Unix的shell提供了⼀些读写⽂本的⼩程序
  • Windows喜欢⽤⼆进制⽂件
  1. DOS是草根⽂化,并不继承和熟悉Unix⽂化
  2. PC刚开始的时候能⼒有限,DOS的能⼒更有限,⼆ 进制更接近底层

 

 

  • ⽂本的优势是⽅便⼈类读写,⽽且跨平台
  • ⽂本的缺点是程序输⼊输出要经过格式化,开销⼤
  • ⼆进制的缺点是⼈类读写困难,⽽且不跨平台
  • int的⼤⼩不⼀致,⼤⼩端的问题...
  • ⼆进制的优点是程序读写快

 

 10.程序为什么要⽂件

  • 配置
  1. Unix⽤⽂本,Windows⽤注册表
  • 数据
  1. 稍微有点量的数据都放数据库了
  • 媒体
  1. 这个只能是⼆进制的
  • 现实是,程序通过第三⽅库来读写⽂件,很少直接读 写⼆进制⽂件

 

 

11. ⼆进制读写

 

 

12. 为什么nitem?

  • 因为⼆进制⽂件的读写⼀般都是通过对⼀个结构变量 的操作来进⾏的
  • 于是nitem就是⽤来说明这次读写⼏个结构变量!

 

13. 在⽂件中定位

  • long ftell(FILE *stream);
  • int fseek(FILE *stream, long offset, int whence);
  1. SEEK_SET:从头开始
  2. SEEK_CUR:从当前位置开始
  3. SEEK_END:从尾开始(倒过来)

 

14. 可移植性

  • 这样的⼆进制⽂件不具有可移植性
  1. 在int为32位的机器上写成的数据⽂件⽆法直接在int 为64位的机器上正确读出
  • 解决⽅案之⼀是放弃使⽤int,⽽是typedef具有明确 ⼤⼩的类型
  • 更好的⽅案是⽤⽂本

 

 

 

 

 

位运算

 

1. 按位运算

C有这些按位运算的运算符:

& 按位的与

| 按位的

~ 按位取反或

^ 按位的异或

<< 左移

>> 右移

 

 

2. 按位与 &

 

 

 

 

3. 按位或 |

 

 

 

 

 

4.  按位取反 ~

 

 

 

 

 

5. 逻辑运算vs按位运算

 

 

 

 

 

6. 左移 <<

 

 

 

 

7. 右移 >>

 

 

 

 

 

 

 

no zuo no die

 

 

 

 

 

8.输出⼀个数的⼆进制

 

 

 

 

 

 

 

9. 位段

 

 

 

 

  • 可以直接⽤位段的成员名称来访问
  1. ⽐移位、与、或还⽅便
  • 编译器会安排其中的位的排列,不具有可移植性
  • 当所需的位超过⼀个int时会采⽤多个int

 

posted @ 2021-12-06 01:30  漫漫长路</>  阅读(41)  评论(0编辑  收藏  举报