首页 > 解决方案 > CS50 Problem Set 1 (Credit) 2020 需要帮助

问题描述

我正在尝试提示用户输入信用卡号,并确定它是否是真实的信用卡号,如果是的话,是什么类型的信用卡号。

我以为我终于明白了,但是在执行 check50 时,以下两个输入没有产生输出:

他们应该给出 INVALID 但我不知道为什么他们没有给出任何输出。

这是我的代码:

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

int main(void)

{
    long Card_Number;
    int Digit_Number = 0, Current_Digit = 0, Even_x2_Product = 0, Even_Digits = 0, Odd_Digits = 0,
        Total_Digit_Sum = 0;
    bool is_even = false;

// Prompt User for Credit Card Number

    do
    {
        Card_Number = get_long("Card Number: ");
    }
    while (Card_Number < 0);

// Check First Digits of Number

    int Digits_MstrCrd = Card_Number / pow(10, 14);
    int Digits_Visa_16 = Card_Number / pow(10, 15);
    int Digits_AmEx = Card_Number / pow(10, 13);
    int Digits_Visa_13 = Card_Number / (pow(10, 12));

// Loop to determine identity of each digit

    while (Card_Number != 0)
    {
        // Get Last Digit of Number

        Current_Digit = (Card_Number % 10);

        // Increase Digit Number by 1 

        Digit_Number += 1;

        // Check if Current Digit is at Odd or Even Position in Card Number

        if (is_even == true)
        {
            // Multiply Digit by 2

            Even_x2_Product = Current_Digit * 2;

            // Add Digits of Multiplication Product

            while (Even_x2_Product != 0)
            {
                Even_Digits += Even_x2_Product % 10;
                Even_x2_Product /= 10;
            }

            // Tell Program Next Digit is Odd

            is_even = false; 
        }
        else 
        {
            // Add Odd Digits

            Odd_Digits += Current_Digit;

            // Tell Program Next Number is Even 

            is_even = true; 
        }

        // Remove Last Digit and Repeat

        Card_Number /= 10;
    }

    // Add Odd and Even Digits Together

    Total_Digit_Sum = Even_Digits + Odd_Digits;

// Loop to Check if Card Number is Valid

    if (Total_Digit_Sum % 10 == 0)
    {
        // Check Mastercard

        if (Digit_Number == 16)
        {
            if (Digits_MstrCrd <= 55 && Digits_MstrCrd >= 51)
            {
                printf("MASTERCARD\n");
            }

            // Check Visa 16

            else if (Digits_Visa_16 == 4)
            {
                printf("VISA\n");
            }
            else
            {
                printf("INVALID\n");
            }
        }

        // Check American Express

        else if (Digit_Number == 15)
        {
            if (Digits_AmEx == 34 || Digits_AmEx == 37)
            {
                printf("AMEX\n");
            }
            else 
            {
                printf("INVALID\n");
            }
        }

        // Check Visa 13

        else if (Digit_Number == 13)
        {
            if (Digits_Visa_13 == 4)
            {
                printf("VISA\n");
            }
            else
            {
                printf("INVALID\n");
            }
        }
        else 
        {
            printf("INVALID\n");
        }
    }
}



标签: ccs50

解决方案


如果不等于 0,程序会Total_Digit_Sum % 10打印什么它没有else}关闭块后没有命令。


推荐阅读