我目前正在参加CS50课程,并且已经遇到了第一个障碍。基本上,我正在尝试检查不同的条件是否正确才能获得输出,但是即使我要介绍的内容正确,它似乎也不起作用。
#include <stdio.h>
#include <cs50.h>
int main(void)
{
int test = 0;
double nr = get_double("Your card number please:\n ");
while(test < 1)
{
if(nr / 100000000000000 < 10)
{
if(nr / 10000000000000 == 37)
{
printf("AMEX");
test++;
}
else if(nr / 10000000000000 == 34)
{
printf("AMEX");
test++;
}
}
else {
printf("false");
}
}
}
这是一个应该起作用的示例:378282246310005。即使输入错误的号码,也不会显示任何内容。 另外,我认为while循环不会中断,因为条件没有运行,或者我还缺少另一个错误?
先感谢一下
答案 0 :(得分:2)
您正在使用double
(浮点数的表示形式,不必为整数),这意味着当您将其除以除数时,结果不会被截断。对于您的示例(输入为378282246310005
),nr / 10000000000000
的值不是37,而是实际上是一个double
,其值约为37.8282246 ...
输入将不适合int,因此cs50.h中可用的get_int
函数将是不合适的。但是,值 将适合long
,在CS50使用的环境中 1
使用类型nr
声明long
,并使用get_long()
从用户处获取输入。然后,nr / 10000000000000
的值将被截断为零,变为37,完全符合您的需要。
1 libcs50
文档get_long()
的作者牢记long
的64位带符号类型,并牢记了预期的工具链和环境。并非总是如此,特别是如果您的环境(操作系统,编译器等)与CS50的作者所期望的不匹配时。
如果您想在其他环境中使用long
,则需要确保您的假设成立。概括地说long
将来会是64位是不明智的,而没有先仔细核实这种情况。出于此分配的目的,给定的类型就足够了,但是您可能要考虑学习stdint.h
标题,该标题提供了具有保证的指定大小的类型。