The digit counter works, displaying thhe correct number of digits, however my variable (number) changes from the initial input. I need it to stay the same because I use it later on in he code to test what type of card it is. Here is an example input and output.
/workspaces/cs50/credit/ $ ./credit
Number?
378282246310005
dcounter, 15
num1, 0
number, 12600566272504165
I can’t figure out why number changes away from 378282246310005.
Here is the section of code in question…
//Asks the user for the card number
long number;
long num1;
do
{
number = get_long("Number?\n");
}
while (number < 1 || number > 9999999999999999);
num1 = number;
//Counts the digits the card has
int dcounter = 0;
while (num1 != 0)
{
num1 /= 10;
dcounter++;
}
printf("dcounter, %i\n", dcounter);
printf("num1, %lo\n", num1);
printf("number, %lo\n", number);
I want number to stay 378282246310005 after the digit counter runs. I think using the numc variable in the dcounter should do that, but alas it did not. Very new coder and been stuck on this for hours.Could it be a limitation of the long type?
>Solution :
You are using printf
with the %o
formatter (modified by l
for long).
That prints out numbers in Octal (base-8) format.
Why are you changing from Decimal (base-10) to Octal format?
Do you get the proper output if you use %ld
(long decimal integer format)?
See this code for demonstration:
#include <stdio.h>
int main(void)
{
long number = 378282246310005;
long num1 = number;
//Counts the digits the card has
int dcounter = 0;
while (num1 != 0)
{
num1 /= 10;
dcounter++;
}
printf("dcounter, %i\n", dcounter);
printf("num1, %lo\n", num1);
printf("number (octal), %lo\n", number);
printf("number (dec), %ld\n", number);
return 0;
}
Output:
dcounter, 15
num1, 0
number (octal), 12600566272504165
number (dec), 378282246310005