我需要检查以下参数:
./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 的错误