Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 对必需参数使用getopt_C_Arguments_Getopt - Fatal编程技术网

C 对必需参数使用getopt

C 对必需参数使用getopt,c,arguments,getopt,C,Arguments,Getopt,我目前有如下代码: while (( flags = getopt(argc, argv, "abc")) != -1){ switch(flags){ case 'a': dflag = 1; break; case 'b': rflag = 1; break; case 'c': cflag = 1; break; } } 问题是我想包括一些类似testp

我目前有如下代码:

while (( flags = getopt(argc, argv, "abc")) != -1){
    switch(flags){
    case 'a':
        dflag = 1;
        break;
    case 'b':
        rflag = 1;
        break;
    case 'c':
        cflag = 1;
        break;
    }
}
问题是我想包括一些类似testprogram-c-d1的东西

当需要c来处理-d时,如果没有-c,testprogram-d1将在没有参数的情况下运行

我尝试了很多种方法,但似乎都没能奏效


任何帮助都将不胜感激。

我认为您有两种选择,一种可行,另一种可能有效,也可能无效

“可能有效,也可能无效”选项的例子如下:

char *opts = "abc";
char *opts_d = "abcd:";

while ((opt = getopt(argc, argv, opts)) != -1)
{
    switch (opt)
    {
    case 'a':
        aflag = 1;
        break;
    case 'b':
        bflag = 1;
        break;
    case 'c':
        cflag = 1;
        opts = opts_d;
        break;
    case 'd':
        dflag = 1;
        dvalue = optarg;
        break;
    default:
        ...error handling...
        break;
    }
}
我不确定是否有任何东西禁止您在连续调用[
getopt()][1]
时更改有效选项列表,但我知道通常不会在执行过程中更改选项。所以,要谨慎对待。请注意,如果从未找到
-c
选项,则
getopt()
将永远不会返回
d
opt
值,否则将不会执行代码。请注意,如果用户在
-c
之前输入
-d
选项,
getopt()
将在处理
-d
时报告无效选项。您可以控制错误报告;你可能不得不这么做。(变量包含无效的实际选项字母。)

“将起作用”选项是:

while ((opt = getopt(argc, argv, "abcd:")) != -1)
{
    switch (opt)
    {
    case 'a':
        aflag = 1;
        break;
    case 'b':
        bflag = 1;
        break;
    case 'c':
        cflag = 1;
        break;
    case 'd':
        if (cflag == 0)
            ...report error about must use -c option before -d option...
        dflag = 1;
        dvalue = optarg;
        break;
    default:
        ...error handling...
        break;
    }
}

提醒我不要调试将变量
dflag
用于
-a
选项和变量
rflag
用于
-b
选项的代码。@Jonathan:然后你去调试了它。。。8分钟后你需要提醒吗?我只是做了一个全局搜索和替换。如果我使用的是
xflag
符号,则
x
-x
匹配。否则,我将为不一定与选项字母相关的控制变量使用更长、更有意义的名称。大纲的另一个问题是“如果在指定
-a
时使用
dflag
,当用户在输入
-c
后传递
-d
时将设置什么变量?”