《C语言学习:文件操作》16

写在前面:本笔记为个人学习各平台C语言系列课程所作,仅供交流学习,不得作他用。

1. 格式化输入输出

(1)flag

没有减号时默认右对齐,添加减号后可以再添加"+"使输出数字带正号。(第一个减号表示左对齐,第二个加号表示正)因为负数被输出时直接带负号,但是正数输出时需要额外添加正号。

可以在d之前添加数字表示输出占据多少个位置。比如:%09d,123。输出000000123。

(2)width

这里的number和*就是输出占多少个字符的意思。*的作用举例:printf("%*d",len,123);

*相当于把输出占位当作一个变量摘出去了,也可以直接在字符串里写。

(3)hIL

比如printf("%hhd",12345);,这里12345是一个整数,被要求当作单个字节输出,流程为:12345------转16进制0x3039------取最低字节39------转10进制57------输出57。但由于这种整数最后输出的是一个字符,所以会警告,可以加一个(char)强制转换12345。

(4)类型

%n的用法举例:

定义一个变量让他表示读入/写出的字符总数,%n把地址给它相当于初始化,就可以输出。

(5)scanf:%flagtype

*号使用例子:

这种如果输入123 456,第一个因为有*号会跳过读取,所以只有456被读到了。

%i的话,输入123正常十进制读入,输入0x12是16进制读入,输入012是8进制读入。

当需要读入时自动跳过空部分时,怎么写?一个例子:

这是GPS的一段1083协议输入,存在两个括号之间为空的情况,这里一个变量可以写在一个\[\]里。

(6)注意事项

printf会返回输出的字符数,scanf会返回读入的项目数:(直接定义int i=printf/scanf)

printf如果有换行符,返回值会考虑+1。

同时,printf是标准输出,fprintf是向文件输出,sprintf是向字符串输出。

这里format是要写入的字符串变量名,%%指输入一个%,%d代表后面那个数字(例:19),这里format相当于"%19ds",可以直接放在printf函数里。

2. 文件输入输出

(1)程序运行重定向><

这是UNIX上的,在WINDOWS终端也可以。

对于test文件,输入12345,输出12345并输出scanf和printf的返回值比;

第二种,输入12345,程序输出值被输入文件12.out,加载12.out即可输出;

第三种,直接把12345输入到文件12.in,加载12.in输出数字;

第四种,把12.in中的值输入程序运行,输出结果;

第五种,把12.in中的值输入程序运行,输出结果到12.out,看不到直接输出。

>和<实现了对文件读写。

(2)文件FILE

前面是在终端操作,这是直接在程序里操作。标准文件打开代码如下:

if语句判断是否打开,打开了则把文件中值读取到程序定义的变量里再打印,最后关闭。这里fp是一个指针。

关于fopen()的参数:

(3)二进制文件

上述读写文件一般指文本文件。

文本文件VS二进制文件:

程序为什么要文件:

注册表是一个非常大的二进制文件,WINDOWS所有软件的注册信息写在一个文件里。

媒体指图片、音频、视频等类型,现在都有专门打开这种类型文件的软件,不需要人为去读取二进制打开。如果一定要读写二进制:

这两个读写函数的参数分别是:内存地址、所指内存大小、几块这样的内存、文件指针。这两个函数多用于直接赋值,比如:

这里ret就是读写成功的字节数,把它与已知应该写入的字节数比较,就可以知道是否成功写入。

为什么要有一个几块内存的参数?

(4)在文件中定位

一个例子:

第一行SEEK_END表示从尾开始,0L表示第一个,也就是尾部第一个。

第二行ftell遍历整个文件,得到整体size。

第三行拿size除以一个结构的size,得到结构数量。

第一行SEEK_SET表示从头开始,指针移到对应地方开始。

第二行定义。

第三行读取文件,只读1个相关结构,把该结构对应变量输出。

(5)其他

相关推荐
ly76891 小时前
JavaScript 从入门到进阶:核心语法、异步编程与工程化实践
开发语言·javascript·ecmascript
Navigator_Z1 小时前
LeetCode //C - 1209. Remove All Adjacent Duplicates in String II
c语言·算法·leetcode
落魄大学生之流水线上谋生计1 小时前
Java锁全面指南:从基础概念到企业级应用
java·开发语言
for_ever_love__1 小时前
python基础语法学习: 闭包
开发语言·python·学习·闭包
ly76891 小时前
Python 全面入门:从核心语法到工程实践
开发语言·python
艾伦_耶格宇2 小时前
【AI】-4 OpenCode Go 接入 Obsidian 完整指南
运维·开发语言·人工智能·agent·opencode
码匠许师傅2 小时前
【C++ 面试真题】30. 聊聊 C++ 的互斥锁与读写锁
java·c++·面试
皮卡丘不断更3 小时前
从遥操作示范到可复现训练:LeRobot 0.6.1 的机器人学习工作流
人工智能·学习·机器人·开源·开发工具
旋生万物3 小时前
【终极实战】用Python从零“生成“一个宇宙:螺旋干涉模型的代码实现
开发语言·前端·人工智能·react.js·php·wpf
ShineWinsu3 小时前
对于 C++:C++14中从变量模板、泛型 Lambda 到并发与字面量的解析
c++·算法