How do I print a 0 in the beginning?

G

gk245

I have this:

#include <stdio.h>

int main (void)
{

int number;

printf ("Enter number: ");
scanf ("%i", &number);
printf ("%05i", number);

return 0;
}

So, if i enter a number like '00768', it should print out the same
'00768'. But its not doing that...its printing out 5 zeros instead.
I have tried using %06d, %.5i, %.5d in the printf statement. None of
them work properly. I can't use any bigger functions, just printf to
do this. Thanks.
 
G

gk245

gk245 explained :
I have this:

#include <stdio.h>

int main (void)
{

int number;

printf ("Enter number: ");
scanf ("%i", &number);
printf ("%05i", number);

return 0;
}

So, if i enter a number like '00768', it should print out the same '00768'.
But its not doing that...its printing out 5 zeros instead.
I have tried using %06d, %.5i, %.5d in the printf statement. None of them
work properly. I can't use any bigger functions, just printf to do this.
Thanks.

woops, sorry, i meant if you typed in a number like 5674, it would add
a zero in front of it, and give a final result of 05674.
 
B

Ben Pfaff

gk245 said:
int main (void)
{

int number;

printf ("Enter number: ");
scanf ("%i", &number);
printf ("%05i", number);

return 0;
}

So, if i enter a number like '00768', it should print out the same
'00768'. But its not doing that...its printing out 5 zeros
instead.

00768 does not have the value 768 when parsed by %i on scanf().
It has the value 62. This is because the leading 0 makes it an
octal constant. The trailing 8 is, I believe, ignored.

Use %d instead of %i to force scanf() to read your integer as a
decimal constant.
 
B

Ben Pfaff

gk245 said:
gk245 explained :
#include <stdio.h>

int main (void)
{

int number;

printf ("Enter number: ");
scanf ("%i", &number);
printf ("%05i", number);

return 0;
}
[...]
woops, sorry, i meant if you typed in a number like 5674, it would add
a zero in front of it, and give a final result of 05674.

So: you want it to print out exactly what you typed in? Then
read it as a string and print it as a string. If you read and
print it as an integer, leading zeros won't be retained, because
they are not part of the value of an integer.
 
G

gk245

Ben Pfaff wrote on 2/16/2006 :
00768 does not have the value 768 when parsed by %i on scanf().
It has the value 62. This is because the leading 0 makes it an
octal constant. The trailing 8 is, I believe, ignored.

Use %d instead of %i to force scanf() to read your integer as a
decimal constant.

Alright, thx. It looks like i have to do it as a character then.
 
J

Jaspreet

gk245 said:
I have this:

#include <stdio.h>

int main (void)
{

int number;

printf ("Enter number: ");
scanf ("%i", &number);
printf ("%05i", number);

return 0;
}

So, if i enter a number like '00768', it should print out the same
'00768'. But its not doing that...its printing out 5 zeros instead.
I have tried using %06d, %.5i, %.5d in the printf statement. None of
them work properly. I can't use any bigger functions, just printf to
do this. Thanks.

Inputting a number with leading zeroes, I guess, converts it to an
octal number. Easy way out here would be to read the number as a string
probably using fgets().
 
K

Keith Thompson

Jaspreet said:
Inputting a number with leading zeroes, I guess, converts it to an
octal number. Easy way out here would be to read the number as a string
probably using fgets().

Scanf's "%i" format expects a string in the same format expected by
strtol() with a base of 0, which means a number with a leading 0 is
treated as octal and a number with a leading 0x or 0X is treated as
hexadecimal. If you only want decimal input, use "%d". (Better yet,
don't use scanf(); use fgets() and parse the input line with
sscanf().)
 
G

gk245

Keith Thompson wrote on 2/16/2006 :
Scanf's "%i" format expects a string in the same format expected by
strtol() with a base of 0, which means a number with a leading 0 is
treated as octal and a number with a leading 0x or 0X is treated as
hexadecimal. If you only want decimal input, use "%d". (Better yet,
don't use scanf(); use fgets() and parse the input line with
sscanf().)

Yeah, the thing was i couldn't use functions like fgets() or sscanf().
Only allowed to use scanf() and printf(). I thought %d treated numbers
entered beginning with a 0 as ocatal too...trying to figure out what
the difference is between %d and %i.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,175
Messages
2,570,944
Members
47,491
Latest member
mohitk

Latest Threads

Top