【问题标题】:How do you pass an optional command line argument for C/C++? [duplicate]如何为 C/C++ 传递可选的命令行参数? [复制]
【发布时间】:2017-03-01 22:45:50
【问题描述】:

我正在尝试编写一个程序,该程序将在某些限制下使用数字 0 - 9 计算不同可能密码的数量。它有一个必需的命令行参数,即密码中的位数,同时还有一个 可选 参数,即禁止的数字。没有输入参数将意味着所有数字都被允许。

例如,我的程序是否应该被称为组合:

$ combinations 8 3    #find number of passwords of length 8 with '3' not allowed

我尝试查找它,发现您可以使用

将参数设置为函数的可选参数
int myfunction( int optional = 3);

例如。但是,如果不输入任何内容,这似乎会将值设置为默认值。如果它留空,我需要它来允许所有数字。我如何为命令行参数做呢?

【问题讨论】:

  • 您可以使用argc 获取传递给程序的参数总数。该计数器提供包括文件名在内的参数。因此,在给出的示例中,您的 argc 将为 3。您可以围绕它构建其余的逻辑。
  • 如果你使用int myfunction( int optional = 3); 你不是在写C;只有 C++ 允许默认参数。但是,这与命令行参数解析无关。基本上,您将在main() 中查看argc 并确定argc == 2 表示“只是长度”,argc == 3 表示“长度和禁止数字”。任何其他内容都将被使用消息(fprintf(stderr, "Usage: %s length [forbidden]\n", argv[0]); 或其他)拒绝。您还将检查参数是否有效。

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


【解决方案1】:

命令行参数作为main 函数的参数从命令行传递到您的程序中。签名需要int main(int argc, char** argv)

second 参数是一个以 null 结尾的字符串数组,其中包含在程序调用中传递的每个参数(包括程序的名称)。首先是数组中有多少个字符串。

您需要检查argc > 2,然后解析argv[2] 的数字。

【讨论】:

  • 为了完整起见,int main(int argc, char *argv[])也可以接受。
  • @DavidBowling,是的,但它比替代形式更具语法糖。
猜你喜欢
  • 2016-09-10
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2015-09-14
  • 2013-07-12
  • 2011-02-12
相关资源
最近更新 更多