Я пытаюсь добавить параметры для моего менеджера пакетов (например, -a, -d, -i и т. Д.) И не могу изменить регистр. Как изменить регистр в зависимости от того, какой из них передан (IE: creep -a firefox)?
Я писал менеджер пакетов и сейчас пытаюсь настроить основной файл c. В этом файле я запускаю определенные функции в зависимости от того, какую опцию вы передаете, например, если вы хотите установить пакет, вы запустите creep -a <package>
, который вызовет функции connection.c
и add.c
. Мне трудно заставить дело измениться. Основной файл c (или creep.c) в настоящее время содержит следующее:
#include <stdio.h>
#include "connection.c"
#include "add.c"
int main(int argc, char *argv[])
{
short i;
char option;
option = 'a';
switch(option) {
case 'a':
printf("a used\n");
connection();
break;
case 'd':
printf("d used\n");
break;
default:
printf("usage: creep [-ad]\n");
}
}
В настоящее время я просто использую операторы print, чтобы убедиться, что все работает правильно. Я просмотрел это для отладки и увидел, что option = 'a'
всегда, поэтому он всегда будет запускать case 'a'
, но я не могу понять, как заставить это измениться. Я попытался option = argv[i]
, но это дало следующую ошибку:
creep.c:11:9: warning: incompatible pointer to integer conversion assigning to 'char' from 'char *'; dereference with * [-Wint-conversion]
option = argv[i];
^ ~~~~~~~
*
1 warning generated.
Таким образом, я провел некоторый поиск и нашел сообщение о переполнении стека об использовании символов для случаев, в которых постеру было сказано не использовать регистр, а вместо этого использовать if / else. Поэтому я попробовал это и получил:
#include <stdio.h>
#include "connection.c"
#include "add.c"
int main(int argc, char *argv[])
{
short i;
for (i = 1; i < argc; i++) {
if (strncmp(argv[i], "-a", 100))
printf("using a\n");
}
}
однако это тоже не работает. Затем я решил взглянуть на некоторый справочный код и посмотрел на Plan9base ls, способ их выбора был следующим:
void
main(int argc, char *argv[])
{
int i;
Binit(&bin, 1, OWRITE);
ARGBEGIN{
case 'F': Fflag++; break;
case 'd': dflag++; break;
case 'l': lflag++; break;
case 'm': mflag++; break;
case 'n': nflag++; break;
case 'p': pflag++; break;
case 'q': qflag++; break;
case 'Q': Qflag++; break;
case 'r': rflag++; break;
case 's': sflag++; break;
case 't': tflag++; break;
case 'u': uflag++; break;
default: fprint(2, "usage: ls [-dlmnpqrstuFQ] [file ...]\n");
exits("usage");
}ARGEND
однако это не применимо к моей базе кода. Как бы я предложил правильные варианты? Я не могу понять это для моей жизни ...