gpt4 book ai didi

CS50积分: how to change those if else conditions

转载 作者:行者123 更新时间:2023-11-30 16:21:29 27 4
gpt4 key购买 nike

我想用那些if else条件来做判断,但是不行。我想这是因为 / 保留了整个部分。所以我想知道:我是否需要改变整个机制(如果有其他条件)或者只是 C 中有什么东西可以用来替换 /

谢谢!

美国运通卡使用 15 位数字,以 34 或 37 开头

if (answer / pow(10,13) == 34 | answer / pow(10,13) == 37 )
{
printf("AMEX\n");
}

MasterCard 使用 16 位数字,以 51、52、53、54 或 55 开头

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");
}

Visa 使用 13 和 16 位数字,以 4 开头

else if (answer / pow(10,12) == 4 | (answer / pow(10,15) )== 4) 
{
printf("VISA\n");
}

最佳答案

double pow(double, double)

pow 使所有算术从整数转换为 double 。

说明您的问题的最简单示例是:

1 / (double)10 == 0.01

为 false,因为舍入错误。切勿使用浮点类型进行 == 比较。

我建议您应该从 double 转向整数,以便使比较准确,例如:

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

关于CS50积分: how to change those if else conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54838833/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com