if语句中的字符串比较会生成一些警告

时间:2016-01-26 08:22:26

标签: c

我试图制作一个计算器,但我的if语句会产生一些警告。我也是C的新手。

int main(){

    float num1;
    float num2;

    char input[5];

    printf("Hello my name is baymax\n");
    printf("Enter either add, sub, mult, div:\n");
    scanf("%4s", input);

    printf("Enter first number\n");
    scanf("%f", &num1);

    printf("Enter second number\n");
    scanf("%f", &num2);

    if(input == 'add'){
        printf("%.1f + %.1f = %.1f",num1, num2, num1+num2);
    ....
    }
    return 0;
}

如果输入的字符串是add,则应添加两个数字。但是在编译时我收到以下警告:

calculator.c:19:14: warning: multi-character character constant [-Wmultichar]
        if(input == 'add'){
                    ^
calculator.c:19:11: warning: comparison between pointer and integer
      ('char *' and 'int')
        if(input == 'add'){

3 个答案:

答案 0 :(得分:3)

该代码存在两个问题:第一个问题是'add'是一个多字符文字,而不是字符串。字符串将使用双引号,如"add"

第二个问题是你不能使用相等比较来比较字符串,因为它会比较指针而不是字符串的内容。要比较字符串,您需要使用strcmp

if (strcmp(input, "add") == 0) { ... }

答案 1 :(得分:1)

此处strcmphttp://linux.die.net/man/3/strcmp)是您的朋友

你需要

if (strcmp(input, "add") == 0) ...

PS:查看scanf的手册页 - 它会返回一个你应该检查的值

答案 2 :(得分:1)

我想这是警告你的线

if(input == 'add')

在C字符串中是派生类型,而不是intfloatchar等本机类型,因此您无法直接使用它们。 您必须使用函数来比较字符串。有许多函数适用于标准库中的字符串(在string.h中定义)。它们都以str前缀开头(几乎所有,请参阅手册) 在您的特定情况下,您需要strcmp()来比较字符串,如果它们相等则返回0:

if(strcmp(input, "add") == 0)