C ++:虽然Loop不会中断

时间:2016-05-19 12:21:33

标签: c++

我们刚刚在学校进行了练习,其中一部分是检查,如果给定的EAN(欧洲物品编号)是有效的。

我为它编写了一个函数,但是当我使用while循环时,它不会离开循环。这是代码:

bool checkEan13(unsigned int code[])
{
    int sum1 = 0;
    int sum2 = 0;
    int sum;

    for (int i = 0; i <= 10; i += 2)
    {
        sum1 += code[i];
    }

    for (int i = 1; i <= 11; i += 2)
    {
        sum2 += code[i];
    }

    sum2 *= 3;
    sum = sum1 + sum2;

    int difference;
    int nextNumber = sum;

    while (!nextNumber % 10 == 0)
    {
        nextNumber++;

        //if (nextNumber % 10 == 0)        <-- it works, when I put in this
        //{                                <--
        //  break;                         <--
        //}                                <--
    }

    difference = nextNumber - sum;

    if (difference == code[12])
    {
        return true;
    }
    else {
        return false;
    }
}

正如您在代码中看到的那样,当我使用if语句进行检查时,它可以工作,但为什么没有它就无法工作?如果&#34; nextNumber&#34;则不应该将while循环的语句设为invaild。是例如50?

谢谢!

2 个答案:

答案 0 :(得分:6)

这与operator precedence有关。 !的优先级高于%,因此您的条件实际上会被评估为

(!nextNumber) % 10 == 0

因此,如果nextNumber是非0值,那么(!nextNumber)如果为false或0且0 % 10为0

要修复它,您可以使用

!(nextNumber % 10 == 0)

将检查nextNumber % 10是否等于0并返回与该检查相反的内容。

当然,Marc van Leeuwen指出我们可以简单地写

nextNumber % 10 != 0

执行完全相同的操作,现在我们不再需要担心运算符优先级。

答案 1 :(得分:1)

请阅读有关运营商优先权的信息。试试while (!((nextNumber%10)==0))