C - Comparaison de deux caractères

J'ai de la difficulté de la comparaison de deux caractères. J'ai écrit un très de base, C problème pour essayer arguments de ligne de commande.

Voici mon code pour l'instant:

#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;
}

Donc, si je tapez ceci dans le terminal:

  $ ./pet_shop -t dog -g f cute small

Je reçois ceci comme résultat:

  You have chosen a dog:
  Traits: cute small

La sortie du manque d'information sur le genre, elle doit être une fille depuis que je suis entré f. Mais j'ai essayé de vérifier par printf("%i", genre) qui a donné la valeur 0. Est g == 'f' la mauvaise manière de comparer les deux personnages?

Les définitions de char *type = ""; sont en lecture seule c'est à dire vous ne pouvez pas affecter directement les chaînes de type une fois que vous avez déclaré. Lisez ce - msdn.microsoft.com/en-us/library/8kc54dd5(v=vs. 80).aspx
Activer les avertissements du compilateur (par exemple avec du CCG -Wall) et les erreurs de ce genre de les trouver facilement.
Vous pouvez certainement affecter des choses à type. Vous ne pouvez pas écrire dans le pointu de la valeur, mais l'OP n'est pas de le faire.
ils ne le sont pas. Les littéraux de chaîne sont en lecture seule, char* variables ne sont pas.
ch doit être déclarée comme int, sinon EOF manipulation peut ne pas être correct ion certaines plates-formes.

OriginalL'auteur tenkii | 2013-06-10