如何在main函数中实现int argc和char * argv []?

时间:2017-12-28 10:11:13

标签: c eclipse

说我写:

program -x +5 +r

其中-x+5+r是命令行开关。

+5:每隔五秒发送一条消息

+r-x:做事

我将如何在int main函数中执行此操作?我需要吗? 作为一个类编程并将-x+5+r作为类的参数,或者每个切换都是自己的类?如果我希望命令行以不同的顺序切换,例如:

,该怎么办?
   program +5 +4 -x

我如何解释消极和积极的迹象?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

这是我的命令行开关处理的标准方式,适用于接受+和 - 数字:

int main(int argc, char **argv)
{
    int i= 0;
    char filename[256];
    int number;
    int xOption= 0;

    /* format: prog -dfilename -xrs -n3 +5 -3
     * Switch chars are case insensitive and can be in any order
     */
LabelNextSwitch:
    while (++i < argc) {
        switch (argv[i][0]) {
        case '-':
                while (*++argv[i]) {
                    switch (toupper(*argv[i])) {
                    case 'D':
                            strncpy (filename, argv[i]+1, 256);
                            filename[255]= '\0';
                            goto LabelNextSwitch;

                    case 'N':
                            ++argv[i]; number = 0;
                            while (isdigit(*argv[i]))
                                number = number *10 + *argv[i]++ - '0';
                            goto LabelNextSwitch;

                    case 'X':
                            xOption= 1;
                            break;

                    case 'R':
                            // whatever
                            break;

                    case 'S':
                            // whatever
                            break;

                    default:
                            if (isdigit(*++argv[i])) {
                                number = 0;
                                while (isdigit(*argv[i]))
                                    number = number *10 + *argv[i]++ - '0';
                                number = -number;
                                goto LabelNextSwitch;
                            }
                            else
                                printf("Bad argument '%c', ignored.\n",*argv[i]);
                    } /* end switch (*argv[i]) */
                } /* end while (*++argv[i]) */
                break;
        case '+':
                if (isdigit(*++argv[i])) {
                    number = 0;
                    while (isdigit(*argv[i]))
                        number = number *10 + *argv[i]++ - '0';
                    goto LabelNextSwitch;
                }
                else
                    printf("Bad argument +%s, ignored.\n",argv[i]);
                break;
        default:
                printf("Bad argument %s, ignored.\n",argv[i]);
        } /* switch (argv[i][0]) */
    } /* end while (++i < argc) */
    return 0;
} /* end function */