Optarg字符串比较C 我是C编程新手,我有C++的一些经验,但是没有C。我有一个关于GETOPT OpTARG参数的问题,这是字符串。我想检查-x标志的输入参数是否等于“dog”。我当前的代码如下所示: int main(int argc, char** argv){ int c; extern char *optarg; extern int optind; extern int optopt; int sum=0; while ( (c = getopt(argc, argv, ":x:h")) != -1) { switch (c) { case 'h': getHelp(); break; case 'x': if(strcmp("dog", optarg)== 0){ sum = 1; } else { sum = 0; } break; } }

Optarg字符串比较C 我是C编程新手,我有C++的一些经验,但是没有C。我有一个关于GETOPT OpTARG参数的问题,这是字符串。我想检查-x标志的输入参数是否等于“dog”。我当前的代码如下所示: int main(int argc, char** argv){ int c; extern char *optarg; extern int optind; extern int optopt; int sum=0; while ( (c = getopt(argc, argv, ":x:h")) != -1) { switch (c) { case 'h': getHelp(); break; case 'x': if(strcmp("dog", optarg)== 0){ sum = 1; } else { sum = 0; } break; } },c,strcmp,getopt,C,Strcmp,Getopt,总之,我想检查-x标志的输入变量是否为dog(如果是,变量sum将更改为0)。在我的例子中,sum变量始终为0,即使输入为“/main-xdog”。 提前谢谢大家 注释不允许我缩进输出。这就是答案。我尝试了问题中的代码,看到了正确的输出 [tmp]$./a.out -x cat Sum = 0 [tmp]$./a.out -x dog Sum = 1 代码如下: #include <stdio.h> #include <stdlib.h> int main(int a

总之,我想检查-x标志的输入变量是否为dog(如果是,变量sum将更改为0)。在我的例子中,sum变量始终为0,即使输入为“/main-xdog”。
提前谢谢大家

注释不允许我缩进输出。这就是答案。我尝试了问题中的代码,看到了正确的输出

[tmp]$./a.out -x cat
Sum = 0
[tmp]$./a.out -x dog
Sum = 1
代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv){
  int c;
  extern char *optarg;
  extern int optind;
  extern int optopt;
  int sum=0;
  while ( (c = getopt(argc, argv, ":x:h")) != -1) {
      switch (c) {
          case 'h':
                break;
          case 'x':
                if(strcmp("dog", optarg)== 0){
                    sum = 1;
                } else {
                    sum = 0;
                }
                break;
        }
    }

    printf("Sum = %d\n", sum);
}
#包括
#包括
int main(int argc,字符**argv){
INTC;
外部字符*optarg;
外部-内部选项;
外-内光电转换;
整数和=0;
而((c=getopt(argc,argv,“:x:h”)!=-1){
开关(c){
案例“h”:
打破
案例“x”:
如果(strcmp(“狗”,optarg)==0){
总和=1;
}否则{
总和=0;
}
打破
}
}
printf(“总和=%d\n”,总和);
}

我编译并尝试了您的代码,我认为狗的输入和值为1,猫的输入和值为0。我同意Jay的观点。我也在尝试同样的事情,并且添加了打印语句。当您执行
foo-xdog
谢谢,您说得对,它可以正常工作。看来我在参数读取顺序上有问题。