C - Vergleich von zwei Zeichen

Ich habe Probleme beim Vergleich von zwei Zeichen. Ich habe geschrieben, eine sehr einfache C-problem zu versuchen, Befehl Linie Argumente.

Hier ist mein code bisher:

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

So, wenn ich geben Sie dies in die Klemme:

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

Bekomm ich dies als Ausgabe:

  You have chosen a dog:
  Traits: cute small

Die Ausgabe es fehlen Informationen über das Geschlecht, es sollte ein Mädchen sein, da ich f eingegeben. Aber ich habe versucht, die Kontrolle durch printf("%i", gender) gab, die den Wert 0. Ist g == 'f' die falsche Art von Vergleich von zwei Zeichen?

  • Definitionen wie char *type = ""; sind schreibgeschützt, d.h. Sie können nicht direkt zuordnen Saiten type Sie haben einmal erklärt. Habe einen Lesevorgang durch diese - msdn.microsoft.com/en-us/library/8kc54dd5(v=vs. 80).aspx
  • Biegen Sie auf compiler-Warnungen (z.B. mit GCC -Wall) und Fehler wie diese können leicht gefunden werden.
  • Sie können sicher zuordnen, Dinge zu type. Sie können nicht schreiben, in der Spitzen-Wert, aber OP ist nicht zu tun.
  • das gilt auch für eine char *const.
  • char * ptr = "" sind immer noch Lesen, nur in C 🙂 @interjay ja, sorry, optarg ist ein Zeiger hier richtig?
  • Sie sind es nicht. String-Literale sind nur-lese - char* Variablen nicht.
  • Ich meine, dass ein char* variable neu zugewiesen werden, um irgendwo anders, und das ist das, was der OP tut. Die Zeichenfolgen sollten nicht und werden nicht geändert durch die gebuchten Programm.
  • okay, ich dachte du meintest, dass das nur-lese-segment könnte geändert werden, durch einen 'char *'. Ich hob es auf, weil meine Annahme, dass die OP soll mit char* type in ähnlicher Weise, wie ein Zeichen-array. Dann erst später stellte ich fest, dass optarg ist ein Zeiger, so ist alles gut.
  • ch sollte erklärt werden, wie int, sonst EOF Handhabung nicht richtig sein könnte-Ionen einigen Plattformen.
  • Eigentlich getopt nicht zurück EOF es gibt -1. (Gleicher Wert, unterschiedliche Konzepte.)

InformationsquelleAutor tenkii | 2013-06-10
Schreibe einen Kommentar