Как разрешить пользователю вводить аргументы командной строки в любом порядке? - PullRequest
0 голосов
/ 31 января 2019

Мне нужно написать зашифрованную / расшифрованную 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

Я не совсемуверен, как это проверить, любая информация поможет!Спасибо!

1 Ответ

0 голосов
/ 02 февраля 2019

Если вы не хотите использовать какую-либо другую библиотеку и предпочитаете обрабатывать все самостоятельно, вам нужно запустить цикл для обработки необходимых аргументов.

Как правило, если вы уверены, что значение придетпосле аргумента вы можете сделать что-то вроде этого:

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.Чтобы проверить, равен ли аргумент, вы можете использовать функцию <string.h> strcmp() или написать свою собственную.

Обработка аргумента может быть такой же простой, как копирование строки в какой-то другой массив char[] или, возможно,даже помня индекс нужного аргумента.Все зависит от того, как вы хотите его использовать.

Циклические теги, как это, означают, что вам не нужно, чтобы они были в определенном порядке.

--- Надеюсь, мой первый ответ SAне так уж плохо :) 1016

...