【发布时间】:2014-12-03 21:52:50
【问题描述】:
我想确保 -f 之后的选项/参数是 0-9 之间的数字。总共必须有 10 个参数,顺序不限。唯一的条件是 -f 后面必须跟一个数字。
/* Ensure that the -f option is included in the arguments
and it is preceeded by valid digit between 0 -9 */
int Crypto::offsetValidation( int argc, char *argv[] )
{
for( int i = 0; i < argc; i++ )
{
if(argv[i] == string("-f"))
{
cout << "offset" << endl;
return offset;
}
}
cout << "Usage: -f is required for offset" << endl;
exit(EXIT_FAILURE);
return 0;
}
【问题讨论】:
-
使用
getopt(),然后检查它与optarg指向的内容是否为一位数(strlen(optarg) == 1 && isdigit(optarg[0]))。即席参数解析将使您陷入各种即席问题。 -
太棒了;感谢您的洞察力。我如何确保它位于“ -f ”选项之后...
-
int opt; while ((opt = getopt(argc, argv, "f:")) != -1) { switch (opt) { case 'f': …play with optarg…; break; default: …usage error and exit…; break; } }是大纲代码。您不能保证您拥有-f3或其他任何东西,但您的原始字符串比较不允许这样做。使用getopt(),您可以保证,如果您在命令行上有-f3或-f 3,那么strcmp(optarg, "3") == 0。我很高兴地假设您只有-f参数;您需要更多代码来处理其他代码,无论它们是什么。 -
太棒了,还有其他几个经过验证的参数。这给了我最大的挑战。非常感谢。
标签: c++ arguments option argv argc