Почему мой getopt никогда не входит в кейс по умолчанию? - PullRequest
0 голосов
/ 19 сентября 2019

Я добавляю аргументы командной строки в мою программу, используя get opt.-l и -s работают нормально, но когда я не передаю аргументы, он просто выходит из программы вместо использования Library_Call.

int main(int argc, char* argv[]){

    int flag = -1, choice; //Setting a flag variable to differenciate btw lib or sys call
    while((choice = getopt(argc, argv, "ls")) != -1){   //Reference from Geeks4Geeks:                                                  
        switch(choice){                                //https://www.geeksforgeeks.org/getopt-function-in-c-to-parse-command-line-arguments/                     
            case 'l':
            flag = Library_Call;    
            break;
            case 's':
            flag = System_Call;
            break;    
            default:
            flag = Library_Call;
        }
    }

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Это просто, как работает getopt.Когда он проанализировал все входные аргументы, он возвращает -1.

Если нет аргументов, анализировать нечего, поэтому он немедленно возвращает -1, завершая ваш цикл.

Чтобы решить вашу проблемуустановки переменной в какое-то значение по умолчанию, сначала инициализируйте переменную:

int flag = Library_Call;
0 голосов
/ 19 сентября 2019

Это не то, как getopt работает: регистр default предназначен для неизвестных опций, а не для пропуска опций.

Если вы хотите установить значение по умолчанию, сделайте это перед обработкой getoptloop.

На странице руководства:

Если параметр был успешно найден, то getopt () возвращает символ параметра.Если все параметры командной строки были проанализированы, то getopt () возвращает -1.Если getopt () встречает символ опции, которого не было в optstring, тогда '?'возвращаетсяЕсли getopt () встречает опцию с отсутствующим аргументом, возвращаемое значение зависит от первого символа в optstring: если это ':', тогда возвращается ':';в противном случае '?'

Таким образом, вместо случая default вы также можете указать '?', но это не будет соответствовать ни одному варианту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...