Opcjonalny parametr w linii poleceń

0

Korzystam z biblioteki getopt, chciałbym aby możliwe było uruchomianie programu z linii poleceń w następujący sposób:

./program -a 1 -b 2

po przełączniku -a oraz -b musi zostać podany argument

lub drugi sposób w jaki można uruchomić program:

./program -o

po przełączniku -o nie ma argumentów

pseudo kod wygląda tak:

while ((ch = getopt(argc, argv, "a:b:c")) != -1)
	switch (ch)
	{
		case 'a':
			// jakis kod
			break;
		case 'b':
			// jakis kod
			break;
		case 'o':
			// opcjonalny parametr
			break;
		case '?':
			if (optopt == 'a' || optopt == 'b')
			{
				printf("-a i -b wymagaja podania argumentow");
				exit(1);
			}
			else
			{
				printf("error\n");
				exit(1);
			}
			break;
		default:
			printf("error\n");
			exit(1);
	}
	if (argv[optind] == NULL || argv[optind+1] == NULL) 
	{
		printf("wymagane -a i -b\n");
		exit(1);
	}

Obecnie program nie uruchamia się poprawnie dopóki nie podam parametru -o.

./program -a 1 -b 2

wypisuje:

wymagane -a i -b

Pomysły?

0

Tego ostatniego ifa podpiąć pod default. Error to error + będzie informacja o parametrach.

A teraz jak podasz "o" to i tak jeden z warunków dotyczący NULLa jest spełniony, więc nic dziwnego, że wyrzuca komunikat (który przecież sam napisałeś :)).

0

Czyli jest to kwestia dobrania odpowiedniego warunku?

1 użytkowników online, w tym zalogowanych: 0, gości: 1