我想使用其他条件进行判断,但没有用。我想这是因为/
保留了整个部分。因此,我想知道:我是否需要更改整个机制(如果有其他条件),或者我可以用C中的任何内容替换/
?
谢谢!
if (answer / pow(10,13) == 34 | answer / pow(10,13) == 37 )
{
printf("AMEX\n");
}
else if (answer / pow(10,14) == 51 | answer / pow(10,14) == 52 | answer / pow(10,14) == 53| answer / pow(10,14) == 54 )
{
printf("MASTERCARD\n");
}
else if (answer / pow(10,12) == 4 | (answer / pow(10,15) )== 4)
{
printf("VISA\n");
}
答案 0 :(得分:0)
double pow(double, double)
pow
使所有算术转换从整数变为双精度。
说明您的问题的最简单示例是:
1 / (double)10 == 0.01
由于舍入错误,为假。切勿使用浮点类型进行==
比较。
我建议您应从双精度转换为整数,以便准确进行比较,例如:
unsigned long long answer = ...;
if (answer / 10000000000000ull == 34 | answer / 10000000000000ull == 37 )
... and so on ...
或者更好,我建议您使用字符串,因为我看不到对卡号为整数进行算术运算的意义。或更妙的是,移至数字数组。
const char answer[16];
scanf("%15s", answer);
if (strlen(answer) == 15 && answer[0] == '3' && (answer[1] == '4' || answer[1] == '7'))
...
else if (strlen(asnwer) == 16 && answer[0] == '5' && ('1' <= answer[1] && answer[1] <= '4'))
... and so on