【问题标题】:Mandatory parameter getopt in CC中的强制参数getopt
【发布时间】:2014-11-17 15:50:19
【问题描述】:

我在 C 中有这段代码

while((i = getopt(argc, argv, ":p:h:s:n:l:f:SLNF")) != -1)
    switch(i){
        case 'p': printf("Porta obbligatoria\n");
                  break;
        case 'h': printf("hostname\n");
                  break;
        case 's': printf("Surname\n");
                  break;
        case 'n': printf("Name\n");
                  break;
        case 'l': printf("Login\n");
                  break;
        case 'f': printf("Faculty\n");
                  break;
        case 'S': printf("Print Surname\n");
                  break;
        case 'L': printf("Print Login\n");
                  break;
        case 'N': printf("Print First name\n");
                  break;
        case 'F': printf("Print Faculty\n");
                  break;
        case '?': printf("USAGE\n");
                  break;
        default: printf("USAGE default\n");
                  break;


    }


   return 0;
}

我怎样才能只有一个强制参数?在我的情况下是 p。

例如:

./MyProgram -p 80 -h 127.0.0.1

结果正常。

./MyProgram -h 127.0.0.1

因为缺少-p而出错

只有-p。

提前致谢。

【问题讨论】:

标签: c getopt


【解决方案1】:

通常你使用while循环来存储值,然后在循环之后检查强制选项:

    int p = -1;

    while((i = getopt(argc, argv, ":p:h:s:n:l:f:SLNF")) != -1)
        switch(i){
            case 'p': p = (int)atol(optarg);
                      break;
            <skipped a few options >
            default: printf("USAGE default\n");
                      break;
        }

    // Check mandatory parameters:
    if (p == -1) {
       printf("-p is mandatory!\n");
       exit 1;
    }

    return 0;
}

【讨论】:

  • 不要使用 atol()。它没有错误恢复,很长一段时间不适合新代码。请改用 strtol()。
  • 不要使用 strtol,因为它会抛出一个异常,如果不处理可能会破坏您的代码。此外,异常安全编程会破坏您的代码结构并将系统变成绝对可怕的混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
相关资源
最近更新 更多