Whenever I run this code with a valid input, it's not outputting correctly and never ends on its own. I'm not sure how to debug this. (4003600000000014) it just takes the input then stops without leaving the script? Any help on this would be appreciated
#include <cs50.h>
#include <stdio.h>
int main(void)
{
//credit card number
long n;
//decimel holder
int d = 0;
int j = 1;
//math opperation variables
int odd = 0;
int even = 0;
long n_mod = 0;
long n_mod_2 = 0;
long n_mod_3 = 0;
int valid = 0;
int e_1 = 0;
int e_2 = 0;
//user input
//dummy proofing
n = get_long("Credit Card #: ");
if (n > 0)
{
n_mod = n;
while(n_mod > 0)
{
//determining digits
n_mod /= 10;
d++;
}
}
//printf("%d\n", d);
//determines what digits are determines if valid or not
if (d != 13 && d != 15 && d != 16)
{
printf("Invalid Card Number\n");
return 0;
}
//check sum
do
{
//odd digits
odd = n % 10;
n_mod_2 = n / 10;
valid += odd;
//even digits
even = n_mod % 10;
n_mod_2 /= 10;
e_1 = even % 10;
e_2 = even / 10;
valid = valid + e_1 + e_2;
} while (n_mod_2 > 0);
//check if valid
if (valid % 10 > 0)
{
printf("Invalid Card Number\n");
return 0;
}
//determine card type
//pull first 2 digits
n_mod_3 = n;
do
{
n_mod_3 /= 10;
} while (n_mod_3 > 100);
if (n_mod_3 / 10 == 4)
{
printf("Card is a valid Visa\n");
}
else if ((n_mod_3 / 10 == 3) && (n_mod_3 % 10 == 4 || n_mod_3 % 10 == 7))
{
printf("Card is a valid Amex\n");
}
else if ((n_mod_3 / 10 == 5) && (n_mod_3 % 10 > 0 || n_mod_3 % 10 < 6))
{
printf("Card is a valid Mastercard\n");
}
else
{
printf("Invalid Card Number\n");
}
return 0;
}