在c中解析多个命令行参数

Parsing multiple command line arguments in c

我有一个 test.c 程序,它从标准输入读取不同的参数,并根据给定的参数输出不同的内容。

例如:./test.c -a 1 -b 2 -c 3

所以我希望我能根据字母去获取某个功能,然后根据数字显示特定的东西。所以一个字母后面总是跟着一个数字。

这是我的代码:

int main(int argc, char *argv[]) {

    printfile();
    while ((++argv)[0]) {
        if (argv[0][0] == '-') {
            switch (argv[0][1]) {
                case 'a':
                    printf("case a\n"); test1(); break;
                case 'b':
                    printf("case b\n"); test2()); break;    
                case 'c':
                    printf("case c\n"); break;
            }
        }
    }
    return 0;
    
}

这里我的代码只需要每个连字符后跟一个字母。是否可以将它们分开,然后将每个字母与其编号放在一起?

通常的方法是使用 getopt() 库。

但是如果你想在你的代码中明确地做到这一点,你可以在案例中递增 argv 并将下一个参数作为参数处理。

int main(int argc, char *argv[]) {

    printfile();
    while ((++argv)[0]) {
        if (argv[0][0] == '-') {
            int param;
            switch (argv[0][1]) {
                case 'a':
                    printf("case a\n"); 
                    argv++;
                    if (argv[0][0]) {
                        param = atoi(argv[0]);
                        test1(param);
                    } else {
                        printf("Missing argument");
                        exit(1);
                    }
                    break;
                case 'b':
                    printf("case b\n"); 
                    argv++;
                    if (argv[0][0]) {
                        param = atoi(argv[0]);
                        test2(param);
                    } else {
                        printf("Missing argument");
                        exit(1);
                    }
                    break;
                case 'c':
                    printf("case c\n"); 
                    argv++;
                    if (argv[0][0]) {
                        param = atoi(argv[0]);
                        test3(param);
                    } else {
                        printf("Missing argument");
                        exit(1);
                    }
                    break;
            }
        }
    }
    return 0;
    
}