2016-10-20 1 views
3

Я пытаюсь написать программу, которая будет подсчитывать количество различных возможных паролей, используя цифры 0-9 при определенных ограничениях. Он должен иметь один обязательный аргумент командной строки, который будет содержать количество цифр в пароле, а также необязательный аргумент , который будет запрещенной цифрой. Введенные аргументы не означают, что все цифры разрешены.Как передать необязательный аргумент командной строки для C/C++?

Например, если моя программа назвать комбинации:

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

Я попытался просмотреть его и обнаружил, что вы можете сделать аргумент необязательный к функции с

int myfunction(int optional = 3); 

, например. Однако, похоже, значение для значения по умолчанию не должно быть введено. Мне нужно, чтобы все цифры были пустыми. Как мне это сделать и для аргументов командной строки?

+0

Вы можете получить общее количество аргументов, переданных программе, с помощью 'argc'. Этот счетчик дает аргументы, включая имя файла. Итак, в примере, когда ваш 'argc' будет равен 3., и вы можете построить остальную часть логики вокруг этого. –

+0

Если вы используете 'int myfunction (int optional = 3);' вы не пишете C; только C++ допускает аргументы по умолчанию. Однако это не связано с разбором аргументов командной строки. В принципе, вы посмотрите на 'argc' в' main() 'и решите' argc == 2' означает «только длина», а 'argc == 3' означает« длина и запрещенная цифра ». Все остальное будет отклонено с использованием сообщения об использовании ('fprintf (stderr," Usage:% s length [forbidden] \ n ", argv [0]);' или около того). Вы также убедитесь, что аргументы действительны. –

ответ

3

Аргументы командной строки передаются из командной строки в вашу программу в качестве параметров вашей функции main. Подпись должна быть int main(int argc, char** argv).

Параметр второй - это массив строк с нулевым завершающим символом, которые содержат каждый аргумент, переданный при вызове программы (включая имя программы). Первое - количество строк в массиве.

Вам нужно будет проверить это argc > 2, а затем разобрать argv[2] для цифры.

+0

Для полноты, 'int main (int argc, char * argv [])' также является приемлемым. –

+0

@DavidBowling, да, но это более синтаксический сахар, чем альтернативная форма. – StoryTeller