C - 主命令中的预处理命令



您好,我正在尝试查找用户是否使用命令行将特定文件名传递给我的程序,如果用户没有,我将提示用户输入所需的这些文件名。

此外,我必须使用预处理命令来执行此操作。

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
}

不能在运行时使用 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 argumentsn");
        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) 

最新更新