【问题标题】:Why I am facing the condition problem in C?为什么我在 C 中面临条件问题?
【发布时间】:2021-05-02 14:43:13
【问题描述】:

这里出了什么问题?如果我输入 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 添加到信用卡号码中?除以23?乘以3?不!那么它不是一个数字:-)

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


【解决方案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++ ;
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    相关资源
    最近更新 更多