Открытие функции, которая что-то делает через аргументы команды

Предположим, я хотел открыть программу с помощью команды (используя argc и argv). Вы получаете название вашей программы, открываете программу. Это дает вам .exe. Затем, как только ваш program.exe запустится, добавьте к нему еще один аргумент, например (program.exe open), который должен открыть что-то в вашей программе.

if (argc >= 5){
    if (int(argv[1]) == 1){
        function1();
        function2();
        function3();

    }

}

По сути, в этом случае, если пользователь должен ввести program.exe 1 (1 в этом случае является открытием), он должен выполнять следующие функции. Почему это неверно логически? (поскольку ничего не отображается)


person Borys Ostapienko    schedule 11.10.2013    source источник
comment
Для начала program.exe 1 не приведет к argc >= 5...   -  person Oliver Charlesworth    schedule 11.10.2013


Ответы (3)


Вам нужно это:

if (argc >= 2){ // the argc is count of supplied argument
                // including executable name
    if ( (argv[1][0]-'0') == 1){
        //argv[1] will be "1"
        //so take first character using argv[1][0]--> gives '1'-->49
        //substract ASCII value of 0 i.e. 48
       //Note: - This will only work for 0-9 as supplied argument
        function1();
        function2();
        function3();

    }

}
person P0W    schedule 11.10.2013
comment
Действительно, но не очень расширяемый (в том смысле, что это сломается для входных значений › 9)... - person Oliver Charlesworth; 11.10.2013

Ваше преобразование argv[1] в int не работает. Вы можете использовать atoi():

if (argc >= 2){
    if (atoi(argv[1]) == 1){
        function1();
        function2();
        function3();
    }
}
person Markku K.    schedule 11.10.2013
comment
Это работает для вывода любого cout ‹‹ . Однако при попытке использовать функции ничего не отображается. У меня есть одна функция, которая открывает файл, другая, которая открывает другой файл, а затем в конце этих функций у меня есть вырезка этого текста. Текст отсутствует при вызове функции в операторе if argv - person Borys Ostapienko; 11.10.2013
comment
Я отредактировал свой ответ, чтобы сравнить argc с 2. Если вы вызываете свою программу следующим образом: program.exe 1, тогда argc будет 2. - person Markku K.; 11.10.2013

Поскольку int(argv[1]) не преобразует строку "1" в int 1. Попробуйте это вместо этого:

if (argv[1][0] == '1') {
person Paul Evans    schedule 11.10.2013
comment
Конечно, если argv[1] равно 10, это может не сработать. - person doctorlove; 11.10.2013