多个逗号分隔值的getopt错误处理 [英] getopt error handling for multiple comma separated values

查看:132
本文介绍了多个逗号分隔值的getopt错误处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何验证从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆