2016-10-29 6 views
0

Ich bin ein Neuling in C-Programmierung, habe ich einige Erfahrungen über C++, aber nichts mit C. Ich habe eine Frage über getopt optarg Argument, das ist Zeichenfolge. Ich möchte überprüfen, ob das Eingabeargument von -x Flag gleich "Hund" ist. Mein aktueller Code wie folgt aussieht:Optarg Zeichenfolge vergleichen C

int main(int argc, char** argv){ 
    int c; 
    extern char *optarg; 
    extern int optind; 
    extern int optopt; 
    int sum=0; 
    while ((c = getopt(argc, argv, ":x:h")) != -1) { 
    switch (c) { 
     case 'h': getHelp(); 
        break; 
     case 'x': if(strcmp("dog", optarg)== 0){ 
         sum = 1; 
        } else { 
         sum = 0; 
        } 
        break; 
    } 
} 

Verdichtete, ich möchte prüfen, ob Eingangsgröße für -x Hund ist oder nicht (wenn ja, wird die Variable Summe auf 0 ändert). In meinem Fall ist die Summenvariable immer 0, obwohl die Eingabe './main -x Hund' ist. Vielen Dank im Voraus!

+0

ich zusammengestellt und versucht, Ihren Code und ich einen siehe Summenwert als 1 für die Eingabe für Hund und Wert als 0 für Katzen Eingang. –

Antwort

2

Kommentar erlaubte mir nicht, den Ausgang einzurücken. Also hier ist es eine Antwort. Ich habe den Code in der Frage ausprobiert und ich sehe die korrekte Ausgabe. Hier

[tmp]$./a.out -x cat 
Sum = 0 
[tmp]$./a.out -x dog 
Sum = 1 

ist der Code:

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char** argv){ 
    int c; 
    extern char *optarg; 
    extern int optind; 
    extern int optopt; 
    int sum=0; 
    while ((c = getopt(argc, argv, ":x:h")) != -1) { 
     switch (c) { 
      case 'h': 
       break; 
      case 'x': 
       if(strcmp("dog", optarg)== 0){ 
        sum = 1; 
       } else { 
        sum = 0; 
       } 
       break; 
     } 
    } 

    printf("Sum = %d\n", sum); 
} 
+0

Ich stimme Jay zu. Ich habe das gleiche versucht und auch Druckanweisungen hinzugefügt. Es funktioniert wie erwartet, wenn Sie 'foo -x dog' ausführen – selbie

+0

Danke, Sie haben Recht, es funktioniert. Es scheint, ich habe ein Problem mit der Reihenfolge der Parameter lesen. – ZPA