0

我需要检查以下参数:

  ./centro -n CD1 –cp 100000 –i 100000 –t 30 –s 1000 –p 11111 

他们可以按任何顺序出现。我有以下代码:

void checkParameters (int argc, char** argv, center_data* info) {

    int opt = 0;

    const char* const short_options = "n:i:t:s:p:a:";

    static struct option long_options[] = {
                    {"cp", 1, NULL, 'a'},
                    {0, 0 , 0, 0}
    };

    if(argc != 13)
            error("Error en numero de argumentos \n");

    while(opt != -1){

        opt = getopt_long_only(argc, argv, short_options, long_options, NULL);

        switch (opt){   

            case 'n':
                strcpy(info->center_name, optarg);
                break;

            case 'a':
                printf("el optgar %s \n", optarg);
                info->cap_max = atoi(optarg);
                if (!(38000 <= info->cap_max && info->cap_max <= 3800000))
                    error("Error en la capacidad maxima del centro. \n");

                break;

            case 'i':
                printf("el optgar %s \n", optarg);
                info->stock = atoi(optarg);
                break;

            case 't':
                printf("el optgar %s \n", optarg);
                info->response_time = atoi(optarg);
                if (!(0 <= info->response_time && info->response_time <= 180))
                    error("Error en el tiempo de respuesta \n");

                break;

            case 's':
                printf("el optgar %s \n", optarg);
                info->supply = atoi(optarg);
                if(!(0 <= info->supply && info->supply <= 10000))
                    error("Error en la cantidad de suministro \n");

                break;

            case 'p':
                printf("el optgar %s \n", optarg);
                info->port = atoi(optarg);
                if (0 <= info->port && info->port <=1023)
                    error("Error: se esta utilizando un puerto bien conocido");

                break;

            case -1:
                printf("caso -1\n");
                break;

            default:
                printf("caso default\n");
                abort();
        }
    }

    if (!(0 <= info->stock && info->stock <= info->cap_max))
        error("Error en el inventario actual de la bomba \n");
}

问题是,它首先进入 n 案例,然后是 -1 并退出。这没有任何意义。我看不到使用 getopt_long_only 的错误

4

2 回答 2

3

请注意以下中破折号的不同长度:

./centro -n CD1 –cp 100000 –i 100000 –t 30 –s 1000 –p 11111

第一个是减号。其他的更长。那就是问题所在。

于 2013-02-08T07:22:49.013 回答
0

先生,您没有对所有论点使用减号

试试这个命令:

./centro -a 100 -n 100000 -i 100000 -t 30 -s 1000 -p 11111

顺便说一句,你能告诉我们它是哪个字符吗,我在我的键盘上找不到任何这样的字符。

于 2013-02-08T07:51:51.150 回答