多个逗号分隔值的getopt错误处理 [英] getopt error handling for multiple comma separated values
问题描述
如何验证从getopt命令行接收的逗号分隔值的多个组合的字符串变量?
how to validate a string variable for multiple combinations of comma separated values received from command line for getopt?
case 'a' :
flaga=1;
alg = optarg;
printf("you entered option -a \"%s\"\n", optarg);
if(strcmp(alg,"lr") == 0 )
{
....//valid
}
else if(strcmp(alg,"lda") == 0 )
{
....//valid
}
else if(strcmp(alg,"knn") == 0 )
{
...//valid
}
"""""
""""
else
{
printf("wrong value entered for option -a \n");
exit();
}
选项-a可以接受以下值: knn, lda, lr, kart, nb, svm。
option -a can accept these values : "knn","lda","lr","kart","nb","svm" .
如果用户仅传递单个值,则上面的代码可以完美地处理错误。
The above code handles errors perfectly if user passes only single value .
但是选项-a可以接受多个v alues以逗号分隔,
But option -a can accept multiple values as comma separated ,
Eg : -a knn,lr,lda
用户可以以任何值的任意组合传递这些值!
User can pass these values in any combination of any values !!
Eg : -a knn,lr,lda
Eg : -a knn,lda.lr
Eg : -a lda,lr
如何检查用户是否传递了选项-a的有效值?
How to Check if user has passed valid values for option -a ?
上面的代码我有如果只传递选项-a的单个值,则将它包括在开关盒中。
The above code i have written is included in switch case and can handle if only single value for option -a is passed .
推荐答案
您可以尝试使用 strtok()
函数:
char *token;
token = strtok(optarg, ",");
while (token != NULL)
{
if (!strcmp(token, "knn") && !strcmp(token, "lr") && !strcmp(token, "la")
*error handling*
token = strtok(NULL, ",");
}
PS: strtok()
是 string.h
编辑:我认为这段代码不会具有您想要的行为。这会更好:
I don't think this code will have your desired behaviour. This will be better:
char *token;
size_t i = 0;
char knn = 0, lr = 0, la = 0;
token = strtok(optarg, ",");
while (token != NULL)
{
if (!strcmp(token, "knn") && knn == 0)
knn = 1;
... // valid
else if (!strcmp(token, "lr") && lr == 0)
lr = 1;
... // valid
else if (!strcmp(token, "la") && la == 0)
la = 1;
... // valid
else
{
printf("Wrong value entered for option -a\n");
exit();
}
token = strtok(NULL, ",");
i++;
}
if (i > 3)
{
printf("Too many values entered for option -a\n");
exit();
}
这篇关于多个逗号分隔值的getopt错误处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!