Я только начал курс CS50, проводимый Гарвардом. В настоящее время я работаю над набором задач 1, который заключается в проверке номера кредитной карты. Почему мое состояние l oop не действует так, как ожидалось? Например, когда я ввожу номер кредитной карты len 16, который не соответствует заданным условиям (например, 59e14), он все равно будет распечатывать «MASTERCARD»?
# include <stdio.h>
# include <cs50.h>
# include <math.h>
// Declaration of the functions
long get_number(void);
//const char * check_len(long cc);
void check_len(long cc);
// Main program
int main(void)
{
int i;
long credit_number = get_number();
printf("Validation for %ld\n", credit_number);
check_len(credit_number);
}
// Function that prompt the user for a credit card number
long get_number(void)
{
// Declaration of the credit card variable
long number;
// Ask the user for a credit card number. If it's not none-negative, keep asking
do
{
number = get_long("Enter credit card number: ");
}
while (number <=0);
return number;
}
// Function to check the type of credit card
void check_len(long cc)
{
// Declaration of variables
int i;
long number = cc;
// Count the len of the provided credit card number
for (i = 0; cc != 0; i++)
{
cc = cc/10;
}
printf("%i\n", i);
// Validate the type of card
if (i == 15)
{
if ( (number >= 34e13 && number < 35e13) || (number >= 37e13 && number < 38e13) )
printf("AMEX\n");
else
{
printf("INVALID\n");
}
}
else if (i == 13 || i == 16)
{
if ( (number >= 51e14 || number < 56e14) )
{
printf("MASTERCARD\n");
}
else if ( (number >= 4e12 || number < 5e12) || (number >= 4e15 || number <= 5e15))
{
printf("VISA\n");
}
else
{
printf("INVALID\n");
}
}
}