将c ++ char结构与ASCII值进行比较会产生错误

时间:2013-01-21 02:53:45

标签: c++ arrays

if (sale->taxStatus[i] = "y")  // line 44

产生错误:

y.cpp:44:12: error: request for member taxStatus in sale, which is of non-class type Sale*

我的结构:

struct Sale {
    int quantity[MAX_SALES];
    float unitPrice[MAX_SALES];
    char taxStatus[MAX_SALES]; // MAX_SALES = 10
};

完整功能:

void total(struct Sale sale[], int sales) {

    int i = 0;
    float subTotal, hst, total = 0;

    for (i = 0; i < sales; i++) {
        subTotal = subTotal + (sale->quantity[i] * sale->unitPrice[i]);
        if (sale->taxStatus[i] = "y")
        {
            hst = hst + ((sale->quantity[i] * sale->unitPrice[i]) * 0.13);
        }
    }

    cout << "\n" << "Subtotal  : " << subTotal << endl;   
    cout << "HST (13%) : " << hst;   
}

2 个答案:

答案 0 :(得分:4)

if (sale->taxStatus[i] == 'y')

正如@jweyrich和@AustinPhillips也指出你需要双等号(==)并且用单引号比较字符。

单等号(=)用于赋值。

e.g。 s = 5;

双等号(==)用于检查两个或两个以上值的相等性。

e.g。 if( s == d && d== e && e == f && f == b ) { };

带有感叹号的等号(!=)用于检查两个或两个以上值的不等式。

e.g。 if( s != d && d != e && e != f && f != b ) { };

答案 1 :(得分:0)

首先,正如已经提到的那样if (sale->taxStatus[i] = "y")是分配而不是比较!

但主要问题是:sale(函数参数)是一个数组(大小为sales),但是你可以访问它(在for body中){{1 }} ...

正确的访问权限必须为Sale*,因为索引sale[i]->taxStatus指向数组i内部,但不指向sale! (顺便说一句,如果taxStatus你会得到UB)。那么您需要使用sales > MAX_SALESstrcmp字面值进行比较...