Getopt 无法识别选项

问题描述

所以我有这个代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    
    int main(int argc,char *argv[]){
    
    
        int opt;
        char* optstring = ":aculr:";
        int aFlag,cFlag,uFlag,lFlag,rFlag;
        aFlag = 0;
        cFlag = 0;
        uFlag = 0;
        lFlag = 0;
        rFlag = 0;
        while ((opt = getopt(argc,argv,optstring)) != -1) {
            switch (opt) {
                case 'a':
                    aFlag=1;
                    break;
                case 'c':
                    cFlag=1;
                    break;
                case 'u':
                    uFlag=1;
                    break;
                case 'l':
                    lFlag=1;
                    break;
                case 'r':
                    rFlag=1;
                    break;
                case '?':
                    return 1;
                case ':':
                    return 2;
                default:
                    abort();
            }
        }
        
            for(int i=optind;i<argc;i++){
                printf("Non-option CMD argument: %s\n",argv[i]);
            }
        }
    
        if(uFlag == 1 && lFlag==1) return 3;
        printf("%d",rFlag);
        return 0;
    }

参数是./e3 this that -r。 我希望它返回 2,因为选项 -r 缺少一个参数。但是它返回 0 并且输出是:

Non-option CMD argument: this
Non-option CMD argument: that
Non-option CMD argument: -r

我很难理解,因为它不承认 -r 作为选项,我不知道为什么。显然我做错了什么,但无法弄清楚。如果我将选项放在非选项参数之前,它会起作用。

/EDIT:我在 Windows 上并安装了 mingw。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)