2016-04-21 5 views
-2

Здравствуйте, я пытаюсь найти, если пользователь использовал командную строку для передачи определенных имен файлов моей программе, если пользователь этого не сделал, я попрошу пользователя ввести эти имена файлов.команды предварительной обработки в основном

Для этого я должен использовать команды предварительной обработки.

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 петь выполняется во время компиляции. Вы не можете использовать его для проверки ввода пользователя. – interjay

+0

Почему бы не использовать обычную переменную? – Holt

+0

_I должен использовать команды предварительной обработки, чтобы сделать это. Какое это требование? Домашнее задание ? Может быть, вы что-то неправильно поняли. –

ответ

1

Вы не можете использовать команды preprossor во время выполнения. Вот почему это называется pre процессор.

Вам нужно это:

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

Или, может быть, вы хотите это:

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

С этим вы можете скомпилировать две версии программы. Если вы скомпилируете его с помощью #define PROMPT 1, вы получите версию, которая всегда запрашивает ввод, а если вы скомпилируете ее с #define PROMPT 0, вы получите версию, которая всегда принимает аргументы командной строки.

Примечание стороны (не связанные непосредственно с вашего вопроса)

Ваш тест, если количество аргументов правильно неправильно: argc, по крайней мере 1, потому что это число аргументов командной строки, в том числе имя сама команда, так что тест должен быть:

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

или даже лучше

if (argc != 3)