2016-04-21 14 views
-2

Hallo Ich versuche zu finden, wenn der Benutzer die Befehlszeile verwendet, um bestimmte Dateinamen an mein Programm weitergeben, wenn der Benutzer nicht, ich werde den Benutzer zur Eingabe dieser Dateinamen aufgefordert.Vorverarbeitung Befehle in Haupt

Weiter muss ich Preprocessing-Befehle dazu verwenden.

int main(int argc, char * argv[]) 
{ 
    char original[100] = ""; 
    char sorted[100] = ""; 
    if (argc == 0 || argc == 1) 
    { 
     #define PROMPT 1 
    } 

    FILE * f; 
    FILE * s; 
    #ifdef PROMPT 
    printf("Please input original file name: "); 
    scanf("%s", original); 
    f = fopen(original, "rw"); 
    printf("Please input sorted file name: "); 
    scanf("%s", sorted); 
    s = fopen(sorted, "rw"); 
    #else 
    f = fopen(argv[1], "rw"); 
    s = fopen(argv[2], "w"); 
    #endif 
} 
+9

Preproces Das Singen wird zur Kompilierzeit durchgeführt. Sie können damit keine Benutzereingaben überprüfen. – interjay

+0

Warum nicht eine normale Variable verwenden? – Holt

+0

_Ich muss Vorverarbeitungsbefehle verwenden, um dies zu tun_ was für eine Anforderung ist das? Hausaufgaben ? Vielleicht hast du etwas falsch verstanden. –

Antwort

1

Sie können Preprossor-Befehle zur Laufzeit nicht verwenden. Deshalb heißt es vor Prozessor.

Sie müssen dies:

int main(int argc, char * argv[]) 
{ 
    char original[100] = ""; 
    char sorted[100] = ""; 
    bool prompt = false; 

    if (argc == 0 || argc == 1) 
    { 
     prompt = true; 
    } 

    FILE * f; 
    FILE * s; 

    if (prompt) 
    { 
     printf("Please input original file name: "); 
     scanf("%s", original); 
     f = fopen(original, "rw"); 
     printf("Please input sorted file name: "); 
     scanf("%s", sorted); 
     s = fopen(sorted, "rw"); 
    else 
    { 
     f = fopen(argv[1], "rw"); 
     s = fopen(argv[2], "w"); 
    } 
} 

Oder vielleicht Sie wollen diese:

#define PROMPT 1 

int main(int argc, char * argv[]) 
{ 
    char original[100] = ""; 
    char sorted[100] = ""; 

    FILE * f; 
    FILE * s; 

#if PROMPT 
    printf("Please input original file name: "); 
    scanf("%s", original); 
    f = fopen(original, "rw"); 
    printf("Please input sorted file name: "); 
    scanf("%s", sorted); 
    s = fopen(sorted, "rw"); 
#else 
    if (argc == 0 || argc == 1) 
    { 
     printf("wrong command line arguments\n"); 
     return 1; 
    } 
#endif 

    f = fopen(argv[1], "rw"); 
    s = fopen(argv[2], "w"); 
} 

Damit Sie zwei Versionen des Programms zusammenstellen können. Wenn Sie es mit #define PROMPT 1 kompilieren, erhalten Sie die Version, die immer zur Eingabe auffordert, und wenn Sie es mit #define PROMPT 0 kompilieren, erhalten Sie die Version, die immer Befehlszeilenargumente benötigt.

Exkurs (nicht direkt zu Ihrer Frage)

Ihr Test, ob die Anzahl der Argumente korrekt ist, ist falsch: argc mindestens 1 ist, weil es die Anzahl der Befehlszeilenargumente einschließlich des Namens ist der Befehl selbst, so sollte der Test sein:

if (argc == 1 || argc == 2) 

oder noch besser

if (argc != 3)