Параметр аргумента командной строки со смещением числа

Я хочу убедиться, что параметр / аргумент после -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;
}

0

Решение

Транскрибирование комментариев в ответ

использование getopt()
, затем проверьте, что это указывает на optarg однозначное число (strlen(optarg) == 1 && isdigit(optarg[0])). Синтаксический разбор аргументов поможет вам разобраться во всевозможных проблемах.

Как я могу убедиться, что это сразу после опции «-f», хотя …

Вы можете написать код, подобный следующему:

int opt;
while ((opt = getopt(argc, argv, "f:")) != -1)
{
switch (opt)
{
case 'f':
if (strlen(optarg) == 1 && isdigit(optarg[0]))
f_value = optarg[0] - '0';
else
err_exit("Invalid value '%s' for -f option", optarg);
break;
default:
…usage error and exit…;
break;
}
}

Вы не можете гарантировать, что у вас есть -f3 или что-то еще, но оригинальное сравнение строк не позволило бы этого. С getopt(), вы гарантированно, что если у вас есть -f3 или же -f 3 в командной строке, то strcmp(optarg, "3") == 0, Я беспечно предполагаю, что у вас есть только -f аргументы; вам нужно больше кода для обработки других, какими бы они ни были. Вам нужно добавить дополнительные буквы в строку, содержащую в данный момент "f:"и дополнительные случаи для переключателя и переменные для их обработки.

Я должен также добавить, что это код C, который может быть скомпилирован C ++, а не «настоящим C ++». Есть Увеличение библиотека для разбора опций в C ++, которая может быть лучшим выбором — если вам разрешено использовать Boost в вашем проекте. Есть также много других парсеров опций в целом. GNU getopt_long() также широко используется для разбора длинных опций (--file name-of-file так далее).

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector