Программа работает так, аргумент вначале указывается в такой форме:
-w кот
Строка «кошка» хранится в переменной pattern , и для каждой буквы, за которой следует - , мы что-то делаем; в этом случае мы устанавливаем mode = W. У меня проблема, когда аргумент имеет форму:
-w -s -n3,4 кот
Теперь я считаю, что, как и раньше, режим установлен на W, S и N в порядке чтения. И если я хотел сохранить / запомнить, какой порядок последовательности букв был установлен в режим после завершения цикла, я могу сохранить информацию в массиве. Также, как и следует сделать, шаблону присваивается строка «кот». Поправьте меня, если я ошибаюсь или есть более простой способ сделать это.
Во-вторых, я хочу иметь доступ и сохранять числа 3 и 4. Я не знаю, как это делается, и не знаю, что такое argc - = optind; и argv + = optind; делает. За исключением того, что я думаю, что аргументы хранятся в строковом массиве.
enum MODE {
W,S,N
} mode = W;
int c;
while ((c = getopt(argc, argv, ":wsn")) != -1) {
switch (c) {
case 'w':
mode = W;
break;
case 's':
mode = S;
break;
case 'n':
mode = N;
break;
}
}
argc -= optind;
argv += optind;
string pattern = argv[0];
Обновление: выяснил, как получить доступ к числам, мне просто нужно было посмотреть, что было в argv во время цикла. Думаю, я просто сохраню найденное значение в другой переменной для использования.
1 ответ
getopt
устанавливает глобальную переменную optarg
, если был предоставлен параметр со значением. Например:
for(;;)
{
switch(getopt(argc, argv, "ab:h")) // note the colon (:) to indicate that 'b' has a parameter and is not a switch
{
case 'a':
printf("switch 'a' specified\n");
continue;
case 'b':
printf("parameter 'b' specified with the value %s\n", optarg);
continue;
case '?':
case 'h':
default :
printf("Help/Usage Example\n");
break;
case -1:
break;
}
break;
}
Более полный пример см. здесь.
Я хочу иметь доступ к номерам 3 и 4 и сохранять их.
Поскольку это список с разделителями-запятыми, вам нужно будет проанализировать optarg
на предмет наличия токенов (см. strtok
), а затем использовать atoi
или что-то подобное для преобразования каждого из них в целое число.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .