Head First C 第三章总结
3 Creating small tools 创建小工具
这一章的内容主要是关于文件的输入与输出的问题.
也就是说:怎么能够将文件作为程序的输入,以及如何将文件作为程序的输出.
用一句话总结,就是:
Make program work with files.
定义Standard Input & Standard Output
在程序执行开始后, Standard Input 和 Standard Output 被 O/S 创建.在默认情况下:
- Standard Input 接受键盘的输入;
- Standard Output 向显示屏输出.
当想要用文件作为输入、输出时,可以采用下面的方法.
——
Redirection (在命令行中使用 “>", "<"
输入格式:./cprogram <gpsdata.csv
作用: 将 gpsdata.csv 的数据作为名为 cprogram 的程序
输出格式:./cprogram > gpsdata.csv
作用: 将 gpsdata.csv 的数据作为名为 cprogram 的程序
Standard Error 以及 fprintf()
O/S 的进程不仅仅有 Standard Input 和 Standard Output,还有 Standard Error,可以利用其将错误提示与输出数据分割开来:
格式:
程序中: fprintf(stderr, "...");
命令行中: 2> error.txt (作用是将错误信息输出到 error.txt 文件中,文件名可以自定义)
fprintf() 是比 printf () 的更通用的函数,
其比 printf() 多一个参数,即第一项,
其 value 可以是 stdout(这就相当于 printf())
也可以是 stderr
fscanf 是比 scanf() 更通用的函数, fscanf(stdin, "...") 就相当于是 scanf()
管道连接符Pipe——“|”
Pipe 是将两个程序的输出和输入连接起来的符号,在命令行中使用.
其能将第一个程序的输出作为第二个程序的输入.
格式:
(./bermuda | ./geo2json) output.json
作用解释:
- 执行./bermuda 和 ./geo2json 两个程序
- ./bermuda 的输出是 ./geo2json 的输入
- spooky.csv 为第一个程序的输入
- output.json 为第二个程序的输出
注意: () 不能省略
自定义数据流Your own Data Streams
需要用到两个函数:fopen() 和 fclose()
对于需要读(输入)的文件,格式为:FILE *in_file = fopen("input.txt", "r");
(其中, "r" 代表read)
然后,程序应该用 fscanf 与程序语句配合,在 fscanf() 的第一个参数应该为文件的指针名.
fscanf(in_file, "...")
对于需要写(输出)的文件,格式为FILE *out_file = fopen("output.txt", "w");
(其中,“w"代表write)
然后,应该使用 fprintf() 函数输出,第一个参数为输出的文件的指针名.
自定义输出输入的文件名
在一般的程序中,无法自定义输出输入的文件名.
但是通过下面两种方法,可以自定义输入与输出的文件名.
1⃣️main() 利用 command-line arguments
格式:
int main(int argc, char *argv[])
main() 函数将 command-line arguments 看作 an array of strings.
其本身具有一些参数,其代表的意义如下:
int argc: 是 arg (参数)的数量
char *argv[] 是 arg (参数)的值
例如:
执行程序 ./categorize 的时候,在命令行中输入:./categorize mermaid mermaid.csv Elvis elvises.csv
其中, “./categorize”就是 argv[0], mermaid.csv是 argv[2].
2⃣️getopt() 利用 command-line options
option 是 形如“-a" 格式的命令
格式:
ch = getopt(argc, argv, "d:t")
然后用 switch 以 ch 为参数执行命令.
其中第三个参数为可用的 option
有冒号表示需要添加描述,其值存在 optarg 这个变量中(系统的变量)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-01-22 Python 编程快速上手 第十五章 保持时间,计划任务和启动程序