main()可以做得更多
用户有权修改程序的工作方式。对GUI程序来说,可以修改程序的首选项;而对于categorize
这样的命令行程序,可以传给它命令行参数。
在C语言中,需要想办法知道数组的长度,所以main()
函数有两个参数,argc
的值用来记录数组中元素的个数。
命令行参数可以让程序更灵活,如果用户能调整程序的工作方式,就会觉得程序很有用。
下面就来修改categorize程序,让它变得更灵活。
用户运行程序时,命令行中第一个参数是程序名。
也就是说,第一个命令行参数其实是
argv[1]
。
代码冰箱贴
代码冰箱贴这是修改以后的categorize
工具,程序从命令行读取搜索关键字和使用的文件,你能否把冰箱贴放到正确的位置?
用以下命令运行程序:
代码冰箱贴解答
代码冰箱贴解答这是修改以后的categorize
工具,程序从命令行读取搜索关键字和使用的文件,请把冰箱贴放到正确的位置。
用以下命令运行程序:
试驾
好了,我们来试一下新的代码,你需要一个叫spooky.csv的测试文件。
运行categorize
时,要用几个命令行参数告诉它查找哪些关键字以及使用哪些文件名:
程序运行以后,生成了以下文件:
安全检查
在Head First实验室,我们从来不会犯错(咳咳)。但是在现实世界,当你在程序中打开文件准备读写时,最好检查一下有没有错误发生。好在如果数据流打开失败,
fopen()
函数会返回0,也就是说如果想检查错误,可以将下面这段代码:
- FILE in = fopen("我不存在.txt", "r");
改成这样:
- FILE in;
- if (!(in = fopen("我不存在.txt", "r"))) {
- fprintf(stderr, "无法打开文件.\n");
- return 1;
- }
Head First披萨屋耳闻
十个程序有九个需要选项。聊天程序有“系统设置”,游戏有调整难度的选项,而命令行工具需要有命令行选项。
命令行选项是一些小开关,它们经常出现在命令行工具中: