程序的工作方式如下,自变量以开头的形式提供:
-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中的内容。因此,我想我将在其中找到的值存储在另一个变量中以供使用。
答案 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>