# CS50 problem set 1 CREDIT works sometime but not always

I am very new at coding and taking CS50. I am currently working on the credit problem in week 1. I finished coding but when I ran check 50 my code only seemed to work for some of the card numbers and I can't figure out why the other ones don't run.

This is my code

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

int main(void)
{
// get card number
long int n;
do
{
n = get_long_long("Credit Card Number:");
}
while (n < 0);

// calculate checksum
int x = n;
int sum1 = 0
int sum2 = 0
int total = 0
int last1;
int last2;
int d1;
int d2;
int dbl;

do
{
last1 = x % 10;
x = x / 10;
sum1 = sum1 + last1;

last2 = x % 10;
x = x / 10;

dbl; = last2 * 2;
d1 = dbl % 10;
d2 = dbl / 10;
sum2 = sum2 + d1 + d2;
}
while (x > 0);
total = sum1 + sum2;

if ((total % 10) != 0)
{
printf("INVALID\n");
return 0;
}

// check length of card number
long int y = n;
int count = 0;

do
{
y = y / 10;
count++;
}
while (y > 0);

if ((count ! = 13) && (count ! = 15) && (count ! = 16))
{
printf("INVALID\n");
return 0;
}

// check starting digits
long int z = n;
do
{
z = z / 10;
}
while (z > 100)

// visa
if (z / 10 == 4)
{
printf("VISA\n");
}
// mastercard
else if ((z / 10 == 5) && (z % 10 > 0) && (z % 10 < 6))
{
printf("MASTERCARD\n");
}
// AMEX
else if ((z / 10 == 3) && ((z % 10 == 4) || (z % 10 == 7)))
{
printf("AMEX\n");
}
else
{
printf("INVALID");
}
}
``````

and these are the error messages I receive when I run check 50

``````:) credit.c exists
:) credit.c compiles
:) identifies 378282246310005 as AMEX
:( identifies 371449635398431 as AMEX
expected "AMEX\n", not "INVALID\n"
:( identifies 5555555555554444 as MASTERCARD
expected "MASTERCARD\n", not "INVALID\n"
:) identifies 5105105105105100 as MASTERCARD
:( identifies 4111111111111111 as VISA
expected "VISA\n", not "INVALID\n"
:( identifies 4012888888881881 as VISA
expected "VISA\n", not "INVALID\n"
:( identifies 4222222222222 as VISA
expected "VISA\n", not "INVALID\n"
:) identifies 1234567890 as INVALID
:) identifies 369421438430814 as INVALID
:) identifies 4062901840 as INVALID
:) identifies 5673598276138003 as INVALID
:) identifies 4111111111111113 as INVALID
:) identifies 4222222222223 as INVALID
``````

the frowny faces are the ones that come out incorrect so let me know if anyone knows why they're not coding correctly!

One issue I see straight away (there may be others?) is that you are correctly taking in the user's input as a long

``````long int n;
``````

but after your loop, you are then storing that value in an int

``````int x = n;
``````

Doing so means that you will lose half the bits of the value.

Try changing `x` to a `long int` to see if that solves your problem.

• Hi, I just tried it and the same 5 card numbers are still not gong through correctly. looks like there are some other issues aswell Jul 16, 2021 at 14:54