Getopt'?'案件永远不会匹配?

时间:2017-04-02 20:08:41

标签: c getopt

我有以下getopt代码。一切都符合预期的'?'。我已经使用下面的用法语句添加了getopt代码。我在'?'里面也有一个打印声明不打印,确保它不匹配。我不知道为什么它与'?'不匹配。

这是我在终端试过的。

  

./ bmptool - ?

  static char usage[] = "Usage: bmptool [-s scale | -r degree | -f ] [-o output_file] [input_file] \n";

    while ((c = getopt(argc, argv, "s:r:fo:")) != -1)
        switch (c) {
        //scale image
        case 's':
            //check if user already entered this case
            if(sFlag > 0)
            {
                fprintf(stderr,"Error! s case used multiple times!\n");
                fprintf(stderr, usage, argv[0]);  //print usage statement
                exit(-1);
            }
            sFlag = 1; //scale image
            checkNum(optarg);    // check if user entered integer
            scale = atoi(optarg); //optarg string convert to int

            //make sure user entered positive int
            if (scale < 1)
            {
                fprintf(stderr,"'%d' is not a postive integer. To scale an image a positive "
                        "number must be entered.\n", scale );
                fprintf(stderr, usage, argv[0]);  //print usage statement
                exit(-1);
            }
            countCase+=2;
            break;

        //rotate image
        case 'r':
            //check if user already entered this case
            if(rFlag > 0)
            {
                fprintf(stderr,"Error! r case used multiple times!\n");
                fprintf(stderr, usage, argv[0]);  //print usage statement
                exit(-1);
            }

            rFlag = 1;            //rotate image
            checkNum(optarg);    // check if user entered integer
            rotation = atoi(optarg); //optarg string convert to int

            //make sure user entered int that is a multiple of 90
            if (rotation % 90 != 0 )
            {
                fprintf(stderr,"'%d' is not multiple of 90. To rotate an image a number that is a multiple "
                        "of 90 must be entered.\n", rotation );
                fprintf(stderr, usage, argv[0]);  //print usage statement
                exit(-1);
            }
            countCase+=2;
            break;

        //flip image
        case 'f':
            //check if user already entered this case
            if(fFlag > 0)
            {
                fprintf(stderr,"Error! f case used multiple times!\n");
                fprintf(stderr, usage, argv[0]);  //print usage statement
                exit(-1);
            }
            fFlag = 1; //flip image
            countCase++;
            break;

        //output to output file given by user
        case 'o':
            //check if user already entered this case
            if(oFlag > 0)
            {
                fprintf(stderr,"Error! o case used multiple times!\n");
                fprintf(stderr, usage, argv[0]);  //print usage statement
                exit(-1);
            }
            oFlag = 1;
            outPutFileName = (char*) malloc(strlen(optarg));
            strcpy(outPutFileName, optarg);
            countCase += 2;
            break;
        case '?':
            printf("in here\n");
            err = 1;
            break;
        }

    if (err || optind + 1 < argc) {
        fprintf(stderr, "Error!\n");
        fprintf(stderr, usage, argv[0]);
        exit(-1);
    }

0 个答案:

没有答案