c - CS50 Problem Set 1 (Credit) 2020 需要帮助
问题描述
我正在尝试提示用户输入信用卡号,并确定它是否是真实的信用卡号,如果是的话,是什么类型的信用卡号。
我以为我终于明白了,但是在执行 check50 时,以下两个输入没有产生输出:
- 1234567890
- 4111111111111113
他们应该给出 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");
}
}
}
解决方案
如果不等于 0,程序会Total_Digit_Sum % 10
打印什么?它没有else
;}
关闭块后没有命令。
推荐阅读
- audio - 星号:WebRTC 没有音频
- mysql - 使用聚合函数连接两个表
- dialogflow-es - 当用户在环聊聊天中与对话流机器人交谈时获取用户名
- python-3.x - CheckBoxGroup 未在 Python/Bokeh 中更新
- xcode - 模拟在应用启动时重新打开文档
- python - 使用 Seaborn 在条形图上绘制线图 - 线图不会渲染
- java - JUnit @Category 方法注解覆盖类注解
- hibernate - 基于表的 1 行列使用休眠创建表
- symfony - Symfony 4 自动装配无法正常工作
- c - 使用c函数中的指针查找字符串长度的问题