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

时间:2019-02-15 16:33:54

标签: c if-statement command-line

我无法让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;
}

4 个答案:

答案 0 :(得分:5)

在命令行上传递的参数是字符串,因此您需要使用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;
}

答案 1 :(得分:3)

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

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

在处理自变量时,还应该检查==中的自变量数量。 (感谢@Ingo Leonhardt)

答案 2 :(得分:1)

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 (man 2 atoi)函数将ascii数组转换为int,如下所示:

#include <stdio.h>
#include <stdlib.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;
} 

答案 3 :(得分:1)

如果要使用命令行参数(如整数),则必须使用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;
}