C语言获取命令行选项(option/flag)和输入的内容(argv)的一种巧妙的办法

我之前有篇博客《C语言中函数main的参数argc和argv是什么》中写到 Unix 命令行选项的惯例是在选项前面加上一个-,用来区分选项名和参数。

原文中提到的方法是用switch判断,我也觉得这个方法很不错,但是最近又发现了一种方法,所以这里作为储备记录一下:

#include 
#include 
#include 	//为了exit(-1)

int main(int argc, char *argv[]) {
    for (int i = 1; i < argc; i+=2) {
    	//下面所有的exit(-1)都可以改成自己所需的错误输出和处理函数
        if (i + 1 >= argc) { exit(-1); } //选项后面必须有参数
        if (argv[i][0] != '-') { exit(-1); } //选项必须有“-”,换句话说,一对选项和参数必须由“-”开头
        
        if (argv[i][1] == 'a') { printf("-a option, value is %s\n", argv[i + 1]); } //识别选项-a,并且输出其参数
        else if (argv[i][1] == 'b') { printf("-b option, value is %s\n", argv[i + 1]); } //识别选项-b,并且输出其参数
        else { exit(-1); } //错误选项,退出程序
    }
    
    return 0;
}

这个方法很难说比之前那个方法好还是不好,但是在处理一种情况的时候可能会好一些,就是当你必须要有一个参数,但这个参数并没有选项的时候。

举个例子,比如说用户必须输入一个地址,当然你可以使用-i,但是也可以直接用最后的else来获取地址。如果输入地址不正确,再进行错误处理。

如果你看过我之前的那篇博客《C语言中函数main的参数argc和argv是什么》,那么这里需要解释的应该只有两个地方:

  • 上面代码中的argv[i][1]其实表示的是argv数组中第i个元素的第 2 个字符(从0开始的),也就是跳过了第一个字符-
  • argv[i + 1]则表示第i+1个字符串,也就是选项后面的参数。

希望能帮到有需要的人~

你可能感兴趣的:(C,语言家族的笔记,c语言)