我们刚刚在学校进行了练习,其中一部分是检查,如果给定的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?
谢谢!
答案 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))
。