2016-04-21 88 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)