2016-04-21 1 views
-2

Bonjour J'essaie de trouver si l'utilisateur a utilisé la ligne de commande pour transmettre des noms de fichiers spécifiques à mon programme, si ce n'est pas le cas, je vais demander à l'utilisateur d'entrer ces noms de fichiers.Commandes de prétraitement à l'intérieur

En outre, je dois utiliser des commandes de pré-traitement pour ce faire.

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 chanter est fait au moment de la compilation. Vous ne pouvez pas l'utiliser pour vérifier la saisie de l'utilisateur. – interjay

+0

Pourquoi ne pas utiliser une variable normale? – Holt

+0

_Je dois utiliser des commandes de pré-traitement pour le faire_ de quel type d'exigence s'agit-il? Devoirs ? Peut-être que vous avez mal compris quelque chose. –

Répondre

1

Vous ne pouvez pas utiliser les commandes de prépresse lors de l'exécution. C'est pourquoi il est appelé pré processeur.

Vous en avez besoin:

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"); 
    } 
} 

Ou peut-être que vous voulez ceci:

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

vous pouvez avec cette compilation deux versions de votre programme. Si vous le compilez avec #define PROMPT 1, vous obtenez la version qui vous invite toujours à entrer, et si vous le compilez avec #define PROMPT 0 vous obtenez la version qui prend toujours des arguments de ligne de commande.

Side note (pas directement lié à votre question)

Votre test si le nombre d'arguments est correct est erroné: argc est au moins 1 parce qu'il est le nombre d'arguments de ligne de commande, y compris le nom de la commande elle-même, de sorte que le test doit être:

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

ou mieux encore

if (argc != 3)