【问题标题】:using getopt to parse command line arguments使用 getopt 解析命令行参数
【发布时间】:2015-01-26 03:56:31
【问题描述】:

我正在尝试使用 getopt 来解析我的命令行参数,但我遇到了一个问题,它设置了错误的值,它跳过了 case 1 并将 case 2 设置为 case 1。这里是 while 循环案例。标志工作正常,只是按位置读取就是问题所在。

while ((c = getopt (argc, argv, "-l:u:eo")) != -1)
         switch (c)
           {
           case 1:
            printf("here\n");
             lower = atoi(optarg);
             break;
           case 2:
             upper = atoi(optarg);
             break;
    }

这是运行程序后终端的输出。

(%) fibon 12 22
here
here
lower = 22, upper = 0, even = 0, odd = 0
Usage: fibon[[lower upper] | [-l lower -u upper]] [-e|-o]

【问题讨论】:

    标签: c getopt


    【解决方案1】:

    来自getopt(3) 手册页:

    如果optstring 的第一个字符是'-',那么每个非选项argv-元素的处理方式就好像它是带有字符代码1 的选项的参数一样。

    这意味着 两个 数字将从 getopt 返回为 1。您需要跟踪自己拥有的选项。

    【讨论】:

    • 你能澄清更多我不明白如何跟踪选项
    • @user3400512 保留一个计数器,初始化为1。如果它是1 它的第一个值,你增加计数器。如果是2,则为第二个值。等等。
    • 我尝试做计数器,当计数器低 1 时 = atoi(argv[1]) 并增加计数器,当计数器为 2 时也这样做,但它仍然不起作用。跨度>
    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 2021-07-26
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多