【问题标题】:How to let a user enter command line arguments in any order?如何让用户以任何顺序输入命令行参数?
【发布时间】:2019-02-23 06:02:29
【问题描述】:

我必须编写一个加密/解密 C 程序并开始它需要 6 个 CL 参数。这对我来说通常很好,但这次参数顺序无关紧要。标志也总是匹配参数类型。例如。 -t 将始终位于 csv 文件之前。

例如,以下都是运行程序的等效方式,并且会产生相同的行为:

./encrypt -t mappingfile.csv -m 1 -i words.txt
./encrypt -m 2 -i words.txt -t mappingfile.csv
./encrypt -m 1 -i words_to_encrypt.txt -t mappingfile.csv

我不确定如何检查这个,任何信息都有帮助!谢谢!

【问题讨论】:

  • 查找getopt函数。
  • 首先你使用int main( int argc, char* argv[ ] ) 而不是int main( void ) 作为你的main 函数。这里,argc 是参数的数量,argv 是字符串数组 (char*s.)
  • 正如@dbush 所说,getopt 完全符合您的要求。
  • char* argv[] 是指向字符的数组,而不是字符串数组。
  • 我见过 getopt 函数,虽然大多数例子都是用它来检测不同的参数,而不是检测它们的顺序。我想这就是我困惑的地方。

标签: c command-line-arguments


【解决方案1】:

如果您不想使用其他库并希望自己处理所有内容,则需要运行一个循环来处理所需的参数。

通常,如果您确定某个值将出现在参数之后,您可以执行以下操作:

for( int i; i < argc; i++ ){
    if( [ argument is equal to some tag ] ){
        [ handle argument at args[i+1] ]
        i++; // Skip the next arg
    } else if ( [ argument is equal to next tag ] ) {

    } // Use for any additional tags you need
}

您可以在处理参数之前添加一个检查,以确保i+1 不会通过 args 数组的边界。要检查参数是否相等,您可以使用 &lt;string.h&gt; 函数 strcmp() 或自己编写。

处理参数可能很简单,例如将字符串复制到其他char[] 数组中,或者甚至可能记住所需参数的索引。这完全取决于您想如何使用它。

像这样遍历标签意味着您不需要它们按任何特定顺序排列。

--- 希望我的第一个 SA 答案还不错:)

【讨论】:

  • @AaronTrip 很高兴我能帮上忙! -- 如果你觉得这回答了这个问题,你能选择它作为答案吗?它会给我们俩一些需要的代表。
猜你喜欢
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 2015-03-26
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多