在C ++中使用getopt()处理参数

时间:2018-09-23 15:21:58

标签: c++ getopt

程序的工作方式如下,自变量以开头的形式提供:

  

-w猫

字符串“ cat”存储在变量 pattern 中,对于后跟-的每个字母,我们都会执行一些操作;在这种情况下,我们将mode设置为W。我遇到的麻烦是当参数的形式为:

  

-w -s -n3,4猫

现在,我相信像以前一样,模式会按照读取的顺序设置为W,S和N。而且,如果我想存储/记住循环完成后设置的字母模式的顺序,我可以将信息存储在数组中。同样应该为 pattern 分配字符串“ cat”。如果我错了或者更简单的方法可以纠正我。

其次,我希望能够访问和存储数字3和4。我不确定该怎么做,也不确定argc-= optind是什么。和 argv + = optind;做。除了我认为参数存储在字符串数组中。

enum MODE {
    W,S,N
} mode = W;
int c;
while ((c = getopt(argc, argv, ":wsn")) != -1) {
    switch (c) {
        case 'w': 
            mode = W;
            break;
        case 's': 
            mode = S;
            break;
        case 'n':
            mode = N;
            break;   
    }
}
argc -= optind; 
argv += optind; 

string pattern = argv[0];

更新:弄清楚如何访问数字,我只需要查看循环中argv中的内容。因此,我想我将在其中找到的值存储在另一个变量中以供使用。

1 个答案:

答案 0 :(得分:0)

getopt在提供带有值的参数时设置全局变量optarg。例如:

for(;;)
{
  switch(getopt(argc, argv, "ab:h")) // note the colon (:) to indicate that 'b' has a parameter and is not a switch
  {
    case 'a':
      printf("switch 'a' specified\n");
      continue;

    case 'b':
      printf("parameter 'b' specified with the value %s\n", optarg);
      continue;

    case '?':
    case 'h':
    default :
      printf("Help/Usage Example\n");
      break;

    case -1:
      break;
  }

  break;
}

有关更完整的示例,请参见here

  

我希望能够访问和存储数字3和4。

由于这是一个逗号分隔的列表,因此您需要解析optarg以获得令牌(请参阅strtok),然后使用atoi或类似方法将每个数字转换为整数。 / p>