#c #getopt
#c #getopt
Вопрос:
Я пытаюсь понять, как работают getopts. Я написал приведенный ниже код, но не уверен, что я делаю неправильно. Пожалуйста, укажите мне :
#include<unistd.h>
..
..
int main( int argc, char *argv[])
{
int ch=0;
while((ch=getopt(argc, argv, "ltR:")!=-1) // 0 here was by mistake. Changed to -1
{
printf("%d",ch); //This prints -1
switch(ch)
{
case 'l':
printf("l");
break;
case 't':
printf("t");
break;
case 'R':
printf("R");
break;
}
}
return 0;
}
$ ./a.out -ltR
$ -1
$ ./a.out -l
$ -1
Может быть, я действительно совершаю ошибку или упускаю какой-то аспект моего понимания getopt.
Внес изменения, но все равно дает тот же результат: (
Спасибо, Файзан
Комментарии:
1. В этом коде также есть проблема со скобками в цикле while. Можете ли вы вставить свой фактический фрагмент кода, потому что он а) не компилируется и б) может дать ключ к вашей реальной проблеме.
2. о .. это на другой машине, на которой у меня нет доступа в Интернет.. вот почему пришлось вводить .. сравнивая оба, но не замечая никакой разницы в циклах while.. проверка еще раз
Ответ №1:
Я думаю, что ваше выражение while должно быть
while((ch=getopt(argc, argv, "ltR")!=-1)
{..}
и опция должна заканчиваться ‘:’
while((ch=getopt(argc, argv, "ltR:")!=-1)
{..}
или два ‘:’, если переключатель необязателен.
Комментарии:
1. Это 0 было по ошибке. Первоначально у меня было -1, но при вводе здесь я сделал его 0. Также добавлен «ltR:», но дает те же результаты
Ответ №2:
На странице руководства -1 указывает, что все аргументы были выполнены, а не 0, как вы, похоже, проверяете.
man 3 getopt
Если опция была успешно найдена, то getopt() возвращает символ опции. Если все параметры командной строки были проанализированы, то getopt() возвращает -1.
Код в вашем вопросе не анализируется из коробки, поэтому он не выглядит как правильная вставка копирования, что значительно затрудняет обнаружение ошибки. Скобки в цикле while могут быть причиной вашей проблемы, но трудно сказать. Если я скопирую ваш пример и исправлю проблему со скобками, код будет работать так, как вы ожидаете.
Комментарии:
1. Если я передаю аргументы, то это не должно быть -1, верно? запуск его как ./a.out -l, но все равно выдает -1
2. Правильно Colin..it здесь была ошибка копирования, и в самой программе тоже была ошибка. Исправил скобки, и это сработало. Спасибо