1

我正在学习 c,这是“Head First C”一书中的一个练习,我的代码看起来与示例相同,但出现了上述错误。

#include <stdio.h>

typedef enum {
    COUNT,POUNDS,PINTS
}unit_of_measure;

typedef union {
    short count;
    float weight;
    float volume;
}quantity;

typedef struct{
    const char *name;
    const char *country;
    quantity amount;
    unit_of_measure units;
}fruit_order;

void display(fruit_order order)
{
    printf("The order contains ");

    if(order.amount==PINTS) //ERROR HERE
        printf("%2.2f pints of %s\n",order.amount.weight, order.name);

    else if(order.amount==POUNDS){  //ERROR HERE
            printf("%2.2f lbss of %s\n",order.amount.weight, order.name);

    else
            printf("%i %s\n",order.amount.weight, order.name);

}

int main()
{
    fruit_order apples = {"apples","Canada", .amount.count=100, COUNT};

    fruit_order strawberries = {"strawberries","England", .amount.count=100, PINTS};
    fruit_order oj = {"juice","USA", .amount.count=100, PINTS};

    display(apples);
    display(strawberries);
    display(oj);
    return 0;
}

这个错误是什么意思?

4

3 回答 3

4

你的意思是:

if (order.units == PINTS)

否则,您将尝试将枚举值与union类型进行比较。

于 2013-08-27T23:12:32.927 回答
1
void display(fruit_order order)
{
    printf("The order contains ");

    if(order.units==PINTS) {
        printf("%2.2f pints of %s\n",order.amount.weight, order.name);
    }
    else if(order.units==POUNDS){  
            printf("%2.2f lbss of %s\n",order.amount.weight, order.name);
    }
    else {
            printf("%i %s\n",order.amount.weight, order.name);
    }
}

unitsunit_of_measure,我们应该使用order.units==PINTS;我建议我们总是使用{}inif语句来使代码更清晰。我刚刚注意到原始代码缺少括号。

于 2013-08-27T23:17:20.410 回答
1

这意味着它所说的。

order.amount是一个量,它是一个并集。您正在将其与枚举进行比较,枚举是下面的 int。你不能那样做。

查看代码我认为您想要的是将比较的左侧更改为order.units

if(order.units==PINTS) 
于 2013-08-27T23:18:27.167 回答