为什么我在 C 中面临条件问题?

时间:2021-05-02 14:43:13

标签: c if-statement while-loop cs50 credit-card

这里出了什么问题?如果我输入 4123456789098 然后将这个数字除以 10^12 它应该等于 4 但它不是?

我的代码:

#include <stdio.h>
#include <cs50.h>
#include <math.h>

int main(void)
{
    while (true)
    {
        long long int id = get_long("Number: ") ;
        int k = 0 ;
        while (id != 0)
        {
                id = id / 10 ;
                k++ ;
        }
        printf("%i\n", k) ;

        // VISA

        if (k == 13)
        {
            int x = id / pow(10 , 12) ;

            if (x == 4)
            {
                printf("VISA\n") ;
                break ;
            }

            else
            {
                printf("INVALID V\n") ;
            }
        }

        // AMEX

        else if (k == 15)
        {
            int y = id / pow(10 , 13) ;

            if (y == 34 || y == 37)
            {
                printf("AMEX\n") ;
                break ;
            }

            else
            {
                printf("INVALID A\n") ;
            }
        }

        // VISA or MASTERCARD

        else if (k == 16)
        {
            int z_M = id / pow(10 , 14) ;
            int z_V = id / pow(10 , 15) ;

            if (z_M >= 51 && z_V <= 55)
            {
                printf("MASTERCARD\n") ;
                break ;
            }

            else if (z_V == 4)
            {
                printf("VISA\n") ;
                break ;
            }

            else
            {
                printf("INVALID V or A\n") ;
            }

        }

    }
}

输出:

Number: 4123456789098
13
INVALID V

预期输出:

Number: 4123456789098
13
VISA

1 个答案:

答案 0 :(得分:1)

您正在修改原始 id 变量的值。然后当您尝试使用 int x = id / pow(10, 12) 查找第一个数字时。 x 将始终为零,因为 id 将始终为零。您可以做的一件事是将 id 的值存储在某个临时变量中。 您可以从

更改此设置
while (id != 0)
{
     id = id / 10 ;
     k++ ;
 }

为此:

long long temp = id;
while (temp != 0)
{
    temp = temp / 10 ;
    k++ ;
 }