【问题标题】:How can I use getOpt to determine if no options are given in C?如何使用 getOpt 确定 C 中是否没有给出选项?
【发布时间】:2016-05-27 02:02:02
【问题描述】:

我正在开发一个简单的程序,它应该根据参数将字符串更改为全部大写或全部小写。例如,如果可执行文件的名称是change

./change -u thiswillbeuppercase

这将是大写

./change -l THISWILLBELOWERCASE

thiswillbelowercase

如果没有提供任何选项,我无法弄清楚如何默认执行大写操作。例如,这就是我希望它执行的方式:

./把这个改成大写

这将是大写

这是我的主要功能目前的样子:

int main(int argc, char *argv[]) {
int c;
while((c = getopt(argc,argv,"u:s:l:")) != -1){
    char *str = optarg;
    if(c == '?'){
        c = optopt;
        printf("Illegal option %c\n",c);
    } else{
    
        switch(c){
            case 'u':
                strupper(str);
                break;
            case 'l':
                strlower(str);
                break;
            case 's':
                strswitch(str);
                break;
            default:
                strupper(str);
                break;
    
        }
    }

}
return 0;

}

我尝试在 switch 语句的默认部分调用 strupper 函数,但这似乎不起作用。到目前为止,如果没有提供任何选项,该程序什么也不做。

我在 stackoverflow 上搜索类似的问题,我发现有人使用 same issue,但他们的问题与 bash 相关,而不是 C。

如果有人有任何建议,我将不胜感激。谢谢。

【问题讨论】:

  • 您的问题标题具有误导性,或者我不明白您在问题正文中要问什么
  • 第二个黄色框是我正在尝试创建的功能。如果用户没有输入任何选项,它会默认调用 strupper 函数。抱歉,如果我不清楚。
  • 您为什么不将您的if (c == '?') 案例放在switch 声明中?
  • 为什么不设置一个代表你想要的动作的变量,初始化为一些默认动作?我忽略了什么吗?
  • 我不太清楚你的意思。我对 c 真的很陌生,getopt 文档对我帮助不大。如果没有选项,我只想能够调用 strupper 函数。

标签: c command-line arguments command-line-arguments getopt


【解决方案1】:

我会这样改变你的代码:

... several includes here...
int main(int argc, char *argv[]) {
    int c;
    while((c = getopt(argc,argv,"u:s:l:")) != -1){
    // ... no changes here ...   
    }
    if ( ( argc > 1 ) && ( c == (-1) ) ) { 
        // implement your default action here. Example
        // for ( int i = 1 ; i < argc ; i++ ) {
        //    strupper ( argv[i] ) ;
        // }
    } 
    return 0;
}

【讨论】:

  • 感谢您的回复。我会试试看的!
  • 这会很好,因为 getopt(和 getopt_long)都会在您遍历选项时剥离 argv 数组并减少 argc 计数。
猜你喜欢
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 2014-03-22
相关资源
最近更新 更多