Mam problem z porównaniem dwóch znaków. Napisałem bardzo prosty problem z C, aby wypróbować argumenty wiersza poleceń.C - Porównanie dwóch znaków
Oto mój kod do tej pory:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
char ch;
char *type = "";
char *gender = "";
int baby = 0;
int count = 0;
/* Options:
* -t = type of pet
* -g = gender
* -b = baby or adult
*/
while ((ch = getopt(argc, argv, "t:g:b")) != EOF)
switch (ch) {
case 't':
type = optarg;
break;
case 'g':
gender = optarg;
break;
case 'b':
baby = 1;
break;
default:
fprintf(stderr, "Invalid option.\n");
return 1;
}
argc -= optind;
argv += optind;
printf("You have chosen a %s.\n", type);
if (gender == 'f')
puts("It's a girl");
if (gender == 'b')
puts("It's a boy.");
// The main command line arguments should be about the traits of the pet
printf("%s", "Traits: ");
for (count = 0; count < argc; count++)
printf("%s ", argv[count]);
return 0;
}
Więc jeśli wpisz w terminalu:
$ ./pet_shop -t dog -g f cute small
uzyskać to jako wyjście:
You have chosen a dog:
Traits: cute small
Wyjście IT brakujące informacje na temat płci, to powinna być dziewczyna odkąd wszedłem do f. Ale próbowałem sprawdzić przez printf ("% i", płeć), które dało wartość 0. Czy g == "f" to niewłaściwy sposób porównywania dwóch znaków?
Definicje takie jak "char * type =" ";' są tylko do odczytu, tzn. Nie można bezpośrednio przypisać ciągów do 'type' po ich zadeklarowaniu. Zapoznaj się z tym - http://msdn.microsoft.com/en-us/library/8kc54dd5(v=vs.80).aspx – Nobilis
Włącz ostrzeżenia kompilatora (np. Z '-Wall 'GCC) i błędy takie jak ten będzie łatwo znaleźć. – interjay
@Nobilis: Możesz na pewno przypisać rzeczy do 'type'. Nie można pisać na wskazaną wartość, ale OP tego nie robi. – interjay