gpt4 book ai didi

C getopt 不读取所有参数

转载 作者:太空宇宙 更新时间:2023-11-04 11:13:58 31 4
gpt4 key购买 nike

我有一个 C 语言作业,需要为不同形式的程序读入选项。不过,在我开始之前,我想确保 getopt 部分工作正常。但是,该程序不断删除最后一个参数,我不知道为什么。每当我输入最后一个字符时,程序都会转到终止程序的默认值。感谢您的帮助!

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

int main(int argc, char **argv)
{
int sFlag = 0;
int lFlag = 0;
int dFlag = 0;
int rFlag = 0;
int c;
opterr = 0;

while ((c = getopt (argc, argv, "slr:")) != -1)
{
switch(c)
{
case 's':
sFlag = 1;
break;
case 'l':
lFlag = 1;
break;
case 'r':
rFlag = 1;
break;
default:
printf("unknown parameter introduced");
exit(-1);
break;
}
}

printf("s = %i, l = %i, d = %i, r = %i", sFlag, lFlag, dFlag, rFlag);

return 1;
}

最佳答案

"slr:"r 之后的冒号告诉 getopt() 等待 之后的强制参数- r.

例子:

  1. getopt(argc, argv, "slr:") 可以解析./project -s -l -r r_arg(或者./project -r r_arg -s 等)
  2. getopt(argc, argv, "s:lr:") 可以解析./project -s s_arg -l -r r_arg
  3. getopt(argc, argv, "s:lr:") 也可以解析 ./project -s -l -r r_arg 而没有error,但该程序的工作方式与用户的预期不同。这是因为 getopt() 期望 -s 后跟它的参数,不管它看起来如何,所以下一个参数 -l 被消耗了并且不会击中您的switch(c)

关于C getopt 不读取所有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21867381/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com