2016-04-21 40 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命令。這就是爲什麼它被稱爲處理器

你需要這樣的:

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)