Fixed number of digits printing of integers (ex: 0001 to 0100)

Discussion in 'C Programming' started by Michel Rouzic, Dec 9, 2005.

  1. I can't think of a simple way to print integers with a fix number of
    digits, in order to obtain something like 0001 for 1 and 0100 for 100
    automatically just by specifying in a variable the number of desired
    digits.

    I thought about printing to a variable using for example %4d and then
    replace ' ' by '0', but I don't know if i can print to an array, and
    then I don't think I can put a variable between % and d to specify the
    number of digits I want.

    I thought that maybe there would be some already existing and easy way
    to do it that I don't know of, otherwise i'd like to know how people
    usually deal with that problem, thanks
    Michel Rouzic, Dec 9, 2005
    #1
    1. Advertising

  2. Michel Rouzic

    jacob navia Guest

    Michel Rouzic a écrit :
    > I can't think of a simple way to print integers with a fix number of
    > digits, in order to obtain something like 0001 for 1 and 0100 for 100
    > automatically just by specifying in a variable the number of desired
    > digits.
    >
    > I thought about printing to a variable using for example %4d and then
    > replace ' ' by '0', but I don't know if i can print to an array, and
    > then I don't think I can put a variable between % and d to specify the
    > number of digits I want.
    >
    > I thought that maybe there would be some already existing and easy way
    > to do it that I don't know of, otherwise i'd like to know how people
    > usually deal with that problem, thanks
    >


    #include <stdio.h>
    int main(void)
    {
    for (int i=4; i<10;i++)
    printf("%05d\n",i*100);
    int width=6;
    printf("%0*d\n",width,746);
    }

    Output
    00400
    00500
    00600
    00700
    00800
    00900
    000746
    jacob navia, Dec 9, 2005
    #2
    1. Advertising

  3. Michel Rouzic

    Mike Wahler Guest

    "Michel Rouzic" <> wrote in message
    news:...
    >I can't think of a simple way to print integers with a fix number of
    > digits, in order to obtain something like 0001 for 1 and 0100 for 100
    > automatically just by specifying in a variable the number of desired
    > digits.
    >
    > I thought about printing to a variable using for example %4d and then
    > replace ' ' by '0', but I don't know if i can print to an array, and
    > then I don't think I can put a variable between % and d to specify the
    > number of digits I want.
    >
    > I thought that maybe there would be some already existing and easy way
    > to do it that I don't know of, otherwise i'd like to know how people
    > usually deal with that problem, thanks


    #include <stdio.h>

    int main()
    {
    int i = 0;

    for(i = 1; i < 101; ++i)
    printf("%04d\n", i);

    return 0;
    }

    Where's your textbook?

    -Mike
    Mike Wahler, Dec 9, 2005
    #3
  4. Michel Rouzic wrote:
    > I can't think of a simple way to print integers with a fix number of
    > digits, in order to obtain something like 0001 for 1 and 0100 for 100
    > automatically just by specifying in a variable the number of desired
    > digits.
    >
    > I thought about printing to a variable using for example %4d and then
    > replace ' ' by '0', but I don't know if i can print to an array, and
    > then I don't think I can put a variable between % and d to specify the
    > number of digits I want.
    >
    > I thought that maybe there would be some already existing and easy way
    > to do it that I don't know of, otherwise i'd like to know how people
    > usually deal with that problem, thanks


    Try "%04d"

    -David
    David Resnick, Dec 9, 2005
    #4
  5. Michel Rouzic

    Ben Pfaff Guest

    "Michel Rouzic" <> writes:

    > I can't think of a simple way to print integers with a fix number of
    > digits, in order to obtain something like 0001 for 1 and 0100 for 100
    > automatically just by specifying in a variable the number of desired
    > digits.
    >
    > I thought about printing to a variable using for example %4d and then
    > replace ' ' by '0', but I don't know if i can print to an array, and
    > then I don't think I can put a variable between % and d to specify the
    > number of digits I want.
    >
    > I thought that maybe there would be some already existing and easy way
    > to do it that I don't know of, otherwise i'd like to know how people
    > usually deal with that problem, thanks


    int num_digits = 4;
    int value = ...whatever...;
    printf("%0*d\n", num_digits, value);

    You should really get a C reference manual.
    --
    "I hope, some day, to learn to read.
    It seems to be even harder than writing."
    --Richard Heathfield
    Ben Pfaff, Dec 9, 2005
    #5
  6. On Fri, 09 Dec 2005 08:20:54 -0800, Michel Rouzic wrote:

    > I can't think of a simple way to print integers with a fix number of
    > digits, in order to obtain something like 0001 for 1 and 0100 for 100
    > automatically just by specifying in a variable the number of desired
    > digits.


    sprintf("%04d", some_int);
    Kleuskes & Moos, Dec 9, 2005
    #6
  7. Mike Wahler wrote:
    > "Michel Rouzic" <> wrote in message
    > news:...
    > >I can't think of a simple way to print integers with a fix number of
    > > digits, in order to obtain something like 0001 for 1 and 0100 for 100
    > > automatically just by specifying in a variable the number of desired
    > > digits.
    > >
    > > I thought about printing to a variable using for example %4d and then
    > > replace ' ' by '0', but I don't know if i can print to an array, and
    > > then I don't think I can put a variable between % and d to specify the
    > > number of digits I want.
    > >
    > > I thought that maybe there would be some already existing and easy way
    > > to do it that I don't know of, otherwise i'd like to know how people
    > > usually deal with that problem, thanks

    >
    > #include <stdio.h>
    >
    > int main()
    > {
    > int i = 0;
    >
    > for(i = 1; i < 101; ++i)
    > printf("%04d\n", i);
    >
    > return 0;
    > }
    >
    > Where's your textbook?


    Thanks. Got no textbook. n869.pdf is all I got. Plus i'm learning C on
    my own
    Michel Rouzic, Dec 9, 2005
    #7
  8. Ben Pfaff wrote:
    > "Michel Rouzic" <> writes:
    >
    > > I can't think of a simple way to print integers with a fix number of
    > > digits, in order to obtain something like 0001 for 1 and 0100 for 100
    > > automatically just by specifying in a variable the number of desired
    > > digits.
    > >
    > > I thought about printing to a variable using for example %4d and then
    > > replace ' ' by '0', but I don't know if i can print to an array, and
    > > then I don't think I can put a variable between % and d to specify the
    > > number of digits I want.
    > >
    > > I thought that maybe there would be some already existing and easy way
    > > to do it that I don't know of, otherwise i'd like to know how people
    > > usually deal with that problem, thanks

    >
    > int num_digits = 4;
    > int value = ...whatever...;
    > printf("%0*d\n", num_digits, value);
    >
    > You should really get a C reference manual.


    OK thanks. All i got is n869.pdf, otherwise I have nothing else. What
    else should I get?
    Michel Rouzic, Dec 9, 2005
    #8
  9. Michel Rouzic

    Ben Pfaff Guest

    "Michel Rouzic" <> writes:

    > Ben Pfaff wrote:
    >> int num_digits = 4;
    >> int value = ...whatever...;
    >> printf("%0*d\n", num_digits, value);
    >>
    >> You should really get a C reference manual.

    >
    > OK thanks. All i got is n869.pdf, otherwise I have nothing else. What
    > else should I get?


    n869.pdf should work fine as a C reference manual. You just need
    to read it carefully.
    --
    "Debugging is twice as hard as writing the code in the first place.
    Therefore, if you write the code as cleverly as possible, you are,
    by definition, not smart enough to debug it."
    --Brian Kernighan
    Ben Pfaff, Dec 9, 2005
    #9
  10. Michel Rouzic

    Flash Gordon Guest

    Michel Rouzic wrote:
    > Ben Pfaff wrote:
    >> "Michel Rouzic" <> writes:


    <snip>

    >> You should really get a C reference manual.

    >
    > OK thanks. All i got is n869.pdf, otherwise I have nothing else. What
    > else should I get?


    I would recommend reading the FAQ and getting a copy of K&R2.
    --
    Flash Gordon
    Living in interesting times.
    Although my email address says spam, it is real and I read it.
    Flash Gordon, Dec 9, 2005
    #10
  11. "Michel Rouzic" <> writes:
    > Ben Pfaff wrote:

    [snip]
    >> You should really get a C reference manual.

    >
    > OK thanks. All i got is n869.pdf, otherwise I have nothing else. What
    > else should I get?


    A good tutorial is K&R2 (Kernighan & Ritchie_, _The C Programming
    Language_, 2nd Edition). A good reference is H&S5 (Harbison & Steele,
    _C: A Reference Manual_, 5th Edition).

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
    We must do something. This is something. Therefore, we must do this.
    Keith Thompson, Dec 9, 2005
    #11
  12. Ben Pfaff wrote:
    > "Michel Rouzic" <> writes:
    >
    > > Ben Pfaff wrote:
    > >> int num_digits = 4;
    > >> int value = ...whatever...;
    > >> printf("%0*d\n", num_digits, value);
    > >>
    > >> You should really get a C reference manual.

    > >
    > > OK thanks. All i got is n869.pdf, otherwise I have nothing else. What
    > > else should I get?

    >
    > n869.pdf should work fine as a C reference manual. You just need
    > to read it carefully.


    yes it's good, I mostly search in it for descriptions of functions,
    but for such a thing as %0*d, I have no idea how I could have found it
    in it
    Michel Rouzic, Dec 9, 2005
    #12
  13. Flash Gordon wrote:
    > Michel Rouzic wrote:
    > > Ben Pfaff wrote:
    > >> "Michel Rouzic" <> writes:

    >
    > <snip>
    >
    > >> You should really get a C reference manual.

    > >
    > > OK thanks. All i got is n869.pdf, otherwise I have nothing else. What
    > > else should I get?

    >
    > I would recommend reading the FAQ and getting a copy of K&R2.


    I see that the K&R2 is from 1988. Isn't it a bit outdated, since I tend
    to stick to C99, as it was made even before the C89?
    Michel Rouzic, Dec 9, 2005
    #13
  14. Michel Rouzic

    Ben Pfaff Guest

    "Michel Rouzic" <> writes:

    > Ben Pfaff wrote:
    >> "Michel Rouzic" <> writes:
    >>
    >> > Ben Pfaff wrote:
    >> >> int num_digits = 4;
    >> >> int value = ...whatever...;
    >> >> printf("%0*d\n", num_digits, value);
    >> >>
    >> >> You should really get a C reference manual.
    >> >
    >> > OK thanks. All i got is n869.pdf, otherwise I have nothing else. What
    >> > else should I get?

    >>
    >> n869.pdf should work fine as a C reference manual. You just need
    >> to read it carefully.

    >
    > yes it's good, I mostly search in it for descriptions of functions,
    > but for such a thing as %0*d, I have no idea how I could have found it
    > in it


    You could have read the description of the fprintf function.
    --
    "Welcome to the wonderful world of undefined behavior, where the demons
    are nasal and the DeathStation users are nervous." --Daniel Fox
    Ben Pfaff, Dec 9, 2005
    #14
  15. "Michel Rouzic" <> writes:
    > Flash Gordon wrote:
    >> Michel Rouzic wrote:
    >> > Ben Pfaff wrote:
    >> >> "Michel Rouzic" <> writes:

    >>
    >> <snip>
    >>
    >> >> You should really get a C reference manual.
    >> >
    >> > OK thanks. All i got is n869.pdf, otherwise I have nothing else. What
    >> > else should I get?

    >>
    >> I would recommend reading the FAQ and getting a copy of K&R2.

    >
    > I see that the K&R2 is from 1988. Isn't it a bit outdated, since I tend
    > to stick to C99, as it was made even before the C89?


    K&R2 is based on a draft of what became the C90 standard.
    You should also read the errata list at
    <http://cm.bell-labs.com/cm/cs/cbook/2ediffs.html>.

    It doesn't cover C99, but then most compilers don't either. A number
    of compilers support *some* of the C99 extensions, but very few
    support all of them. It's up to you to decide whether a given C99
    feature is useful enough that you can risk the possible
    non-portability.

    C99 is very nearly upward compatible with C90 (even more so with
    well-written C90 that avoids things like implicit int) , so if you
    stick to what K&R2 tells you, your code should work with any C90 or
    C99 compiler.

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
    We must do something. This is something. Therefore, we must do this.
    Keith Thompson, Dec 9, 2005
    #15
  16. Ben Pfaff wrote:
    > "Michel Rouzic" <> writes:
    >
    > > Ben Pfaff wrote:
    > >> "Michel Rouzic" <> writes:
    > >>
    > >> > Ben Pfaff wrote:
    > >> >> int num_digits = 4;
    > >> >> int value = ...whatever...;
    > >> >> printf("%0*d\n", num_digits, value);
    > >> >>
    > >> >> You should really get a C reference manual.
    > >> >
    > >> > OK thanks. All i got is n869.pdf, otherwise I have nothing else. What
    > >> > else should I get?
    > >>
    > >> n869.pdf should work fine as a C reference manual. You just need
    > >> to read it carefully.

    > >
    > > yes it's good, I mostly search in it for descriptions of functions,
    > > but for such a thing as %0*d, I have no idea how I could have found it
    > > in it

    >
    > You could have read the description of the fprintf function.


    well, I just looked the whole description of this function (which cover
    several pages) and couldn't even find it, although I knew precisely
    what I was looking for. You know when you're looking for such an info
    it's not obvious to tell yourself "How am I gonna find out how to print
    that? i know! i'm gonna read the 7 pages of the fprintf function, the
    answer will surely be there" well of course you can read those pages
    just by curiosity and find that out but when you're looking for
    something precise you won't do that...
    Michel Rouzic, Dec 10, 2005
    #16
  17. Michel Rouzic

    Michael Mair Guest

    Michel Rouzic wrote:
    > Ben Pfaff wrote:
    >
    >>"Michel Rouzic" <> writes:
    >>
    >>
    >>>Ben Pfaff wrote:
    >>>
    >>>>"Michel Rouzic" <> writes:
    >>>>
    >>>>
    >>>>>Ben Pfaff wrote:
    >>>>>
    >>>>>>int num_digits = 4;
    >>>>>>int value = ...whatever...;
    >>>>>>printf("%0*d\n", num_digits, value);
    >>>>>>
    >>>>>>You should really get a C reference manual.
    >>>>>
    >>>>>OK thanks. All i got is n869.pdf, otherwise I have nothing else. What
    >>>>>else should I get?
    >>>>
    >>>>n869.pdf should work fine as a C reference manual. You just need
    >>>>to read it carefully.
    >>>
    >>>yes it's good, I mostly search in it for descriptions of functions,
    >>>but for such a thing as %0*d, I have no idea how I could have found it
    >>>in it

    >>
    >>You could have read the description of the fprintf function.

    >
    > well, I just looked the whole description of this function (which cover
    > several pages) and couldn't even find it, although I knew precisely
    > what I was looking for. You know when you're looking for such an info
    > it's not obvious to tell yourself "How am I gonna find out how to print
    > that? i know! i'm gonna read the 7 pages of the fprintf function, the
    > answer will surely be there" well of course you can read those pages
    > just by curiosity and find that out but when you're looking for
    > something precise you won't do that...


    Well, the text tells you about flags, precision, fieldwidth, length
    modifiers, and conversion specifiers. The latter are mandatory.
    So, once again: Is 0 a flag? Yes
    Next one: Is * in this case a fieldwidth or a precision? You can answer
    that one yourself. As there is no length modifier and the d conversion
    specifier, you should be able to figure out what it does.
    If you are not, you may be more happy with the C99 library reference
    provided to the public by dinkumware.com (this is a resource
    I appreciate very much) -- there is no shame in this; you have to
    understand "Standardese" and know C and the capabilities of the
    library to some extent to make full use of N869 or one of the other
    public drafts.

    If this is not enough, get a paper reference book. Maybe others can
    give you the title of a book appropriate to your needs.

    Another way is searching the clc archives. I/O, especially the
    formatted variety, comes up around here very often.


    Cheers
    Michael
    --
    E-Mail: Mine is an /at/ gmx /dot/ de address.
    Michael Mair, Dec 10, 2005
    #17
  18. On Fri, 09 Dec 2005 12:27:28 -0500, Michel Rouzic <>
    wrote:

    >
    > Ben Pfaff wrote:
    >
    >> You should really get a C reference manual.

    >
    > OK thanks. All i got is n869.pdf, otherwise I have nothing else. What
    > else should I get?


    I for quick reference on the fly when I am looking for certain
    functionality, I find O'Reilly's Pocket C Reference Guide to be very
    useful.

    - Arctic

    --
    Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
    Arctic Fidelity, Dec 10, 2005
    #18
  19. Michel Rouzic

    Malcolm Guest

    "Michel Rouzic" <> wrote
    >>
    >> You could have read the description of the fprintf function.

    >
    > well, I just looked the whole description of this function (which cover
    > several pages) and couldn't even find it, although I knew precisely
    > what I was looking for. You know when you're looking for such an info
    > it's not obvious to tell yourself "How am I gonna find out how to print
    > that? i know! i'm gonna read the 7 pages of the fprintf function, the
    > answer will surely be there" well of course you can read those pages
    > just by curiosity and find that out but when you're looking for
    > something precise you won't do that...
    >

    Some computer documentation is appalling.
    What the computer wants and needs is some sort of formal grammatical
    description of the printf string (maybe a regular expression or a yacc
    grammar).

    Some people think that, therefore, it is also appropriate to provide the
    user with such a description. Of course the computer and the human
    understanding of the function are two different things. Humans can easily
    extrapolate from examples of usage to the grammar, whilst computers find
    this very difficult.
    Malcolm, Dec 10, 2005
    #19
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Kiran
    Replies:
    1
    Views:
    507
    =?Utf-8?B?ZG90bmV0a3VtYXI=?=
    Aug 4, 2005
  2. mosi
    Replies:
    14
    Views:
    614
    Bruno Desthuilliers
    Jul 18, 2007
  3. bejiz
    Replies:
    12
    Views:
    599
  4. c gordon liddy

    || putchar(ch == '\177' ? '?' : ch | 0100) == EOF)

    c gordon liddy, Mar 28, 2008, in forum: C Programming
    Replies:
    8
    Views:
    409
    David Thompson
    Apr 7, 2008
  5. Christoph Bartoschek
    Replies:
    6
    Views:
    2,860
    James Kanze
    Apr 21, 2009
Loading...

Share This Page