我正在处理来自CS50的信用卡PSET,我成功地完成了大部分代码,但是当我达到检查卡片是否有效的条件时,当我试图编译它时,它会给我这个错误。在常量操作数中使用逻辑的“AC.26”,在按位操作时使用“AC.26”。这是破坏我代码的部分。
if (counter > 12 && counter < 17) // check first condition
{
if (sum % 10 == 0) // check 2nd condition
{
if (number != (4 || 34 || 37 || 51 || 52 || 53 || 54 || 55))
{
do
{
testnumber4 /= 10;
}
while (testnumber4 != (4 || 34 || 37 || 51 || 52 || 53 || 54 || 55));
if (testnumber4 == 4)
{
printf("VISA\n");
}
else if (testnumber4 == (34 || 37))
{
printf("AMEX\n");
}
else if (testnumber4 == (51 || 52 || 53 || 54 || 55))
{
printf("MASTERCARD\n");
}
else
{
printf("INVALID\n");
}
}
else
{
printf("INVALID\n");
}
}
else
{
printf("INVALID\n");
}
}
else
{
printf("INVALID\n");
}发布于 2022-09-18 16:57:55
你的代码
if (number != (4 || 34 || 37 || 51 || 52 || 53 || 54 || 55))就像你说的那样,“数字不是4或34…”,
或者更准确地说,“数字不是4,34,.列表中的任何东西”。
即使是口语,这也是不能理解的,但人类通常可以从语境中看出你的意思。
然而,编译器是愚蠢的。所以你必须非常不理解。你需要把它说得非常详细。你必须说“数字不是4,数字不是34,数字不是.”。
在C中,如下所示
if ( (number != 4) &&
(number != 34) &&
(number != 37) &&
(number != 51) &&
(number != 52) &&
(number != 53) &&
(number != 54) &&
(number != 55)
)您所得到的错误解释为编译器尝试时有多困惑,但却无法理解您的逻辑。
它认为“取所有这些数字,逻辑上或它们;嗯,它们都是非零的;所以结果就像‘真或真或真’;嗯,这是没有道理的,也许你想要二进制--或者它们?这至少会给出一个有趣的值。”
https://stackoverflow.com/questions/73764320
复制相似问题