在c中使用带有命令行参数的if语句

在c中使用带有命令行参数的if语句,c,if-statement,command-line,C,If Statement,Command Line,我很难让if语句与命令行中的参数一起工作。我每次都会收到一个错误,它是‘指针和整数‘char*’和‘int’之间的比较’。任何帮助都将不胜感激。以下是我必须做的事情的描述: 该程序将从命令行读取一个参数,并将其转换为相应月份的名称。即,如果使用以下参数运行程序: 它将打印以下消息: 这个月是“四月” #include <stdio.h> int main(int argc, char *argv[]) { if(argv[1] == 1){ printf("

我很难让if语句与命令行中的参数一起工作。我每次都会收到一个错误,它是‘指针和整数‘char*’和‘int’之间的比较’。任何帮助都将不胜感激。以下是我必须做的事情的描述:

该程序将从命令行读取一个参数,并将其转换为相应月份的名称。即,如果使用以下参数运行程序:

它将打印以下消息:

这个月是“四月”

#include <stdio.h>

int main(int argc, char *argv[]) {
    if(argv[1] == 1){
        printf("You entered the number 1.");
    } else {
        printf("You entered a different number.");
    }

    return 0;
}

命令行上传递的参数是字符串,因此需要使用strcmp来比较它们

int main(int argc, char *argv[]) {
    if(argc > 1 && (strcmp(argv[1],"1") == 0)){
        printf("You entered the number 1.");
    } else {
        printf("You entered a different number.");
    }

    return 0;
}

命令行上传递的参数是字符串,因此需要使用strcmp来比较它们

int main(int argc, char *argv[]) {
    if(argc > 1 && (strcmp(argv[1],"1") == 0)){
        printf("You entered the number 1.");
    } else {
        printf("You entered a different number.");
    }

    return 0;
}

Argv返回指向字符数组的指针,因此您的程序必须如下所示:

 #include <stdio.h>

    int main(int argc, char *argv[]) {
        if(argv[1][0] == '1'){
            printf("You entered the number 1.");
        } else {
            printf("You entered a different number.");
        }

        return 0;
    }

Argv返回指向字符数组的指针,因此您的程序必须如下所示:

 #include <stdio.h>

    int main(int argc, char *argv[]) {
        if(argv[1][0] == '1'){
            printf("You entered the number 1.");
        } else {
            printf("You entered a different number.");
        }

        return 0;
    }

如果希望像使用整数一样使用命令行参数,则必须使用atoi修改该类型

#include <stdio.h>

int main(int argc, char *argv[]) {
    if(atoi(argv[1]) == 1){
        printf("You entered the number 1.");
    } else {
        printf("You entered a different number.");
    }

    return 0;
}

如果希望像使用整数一样使用命令行参数,则必须使用atoi修改该类型

#include <stdio.h>

int main(int argc, char *argv[]) {
    if(atoi(argv[1]) == 1){
        printf("You entered the number 1.");
    } else {
        printf("You entered a different number.");
    }

    return 0;
}

编译器是正确的-您正在比较char*和int

您必须将argv[1]转换为int,例如使用strol,或者通过添加引号-1将1转换为char*,然后与strcmp进行比较,而不是==


在使用参数时,检查argc中参数的数量也是您应该做的事情。谢谢@Ingo Leonhardt

编译器是正确的-您正在比较char*和int

您必须将argv[1]转换为int,例如使用strol,或者通过添加引号-1将1转换为char*,然后与strcmp进行比较,而不是==


在使用参数时,检查argc中参数的数量也是您应该做的事情。感谢@Ingo Leonhardt

argv[1]是指向以null结尾的字符串的指针,将指针与1进行比较没有多大意义。如果argv[1][0]='1'&&argv[1][1]='\0'argv[1]是指向以null结尾的字符串的指针,则将指针与1进行比较没有多大意义。如果argv[1][0]='1'&&argv[1][1]是指针,则没有多大意义=='\0'非常感谢您。我昨晚花了几个小时想弄明白怎么做,所以这意味着很多@AntonioOcasio如果您想使用,您可能还需要使用atoi或strtol将字符串转换为整数。非常感谢。我昨晚花了几个小时想弄明白怎么做,所以这意味着很多@AntonioOcasio如果你想使用的话,你也可以使用atoi或strtol将字符串转换成整数;如果argv[1]==1仍然不存在work@IngoLeonhardt哦,对了。因此,您需要将comparison更改为strcmp,而不是==.right,并检查argc。也许你不想修改你的回答对不起,太冒昧了。单引号只有在你按照@vladimir在他的回答中建议的方式使用时才有效谢谢@IngoLeonhardt,我不得不尝试使用“1”,因为我认为它会起作用:但它不会,所以我删除了该部分。添加引号无法修复代码;如果argv[1]==1仍然不存在work@IngoLeonhardt哦,对了。因此,您需要将comparison更改为strcmp,而不是==.right,并检查argc。也许你不想修改你的回答对不起,太冒昧了。单引号只有在你按照@vladimir在他的回答中建议的方式使用时才有效谢谢@IngoLeonhardt,我必须尝试使用“1”,因为我认为它会起作用:但它不会,所以我删除了该部分。但是最好先检查argc,但最好先检查argc