Table of Contents

printf

Syntax:

    #include <cstdio>
    int printf( const char *format, ... );

The printf function prints output to stdout, according to format and other arguments passed to printf. The string format consists of two types of items: characters that will be printed to the screen, and format commands that define how the other arguments to printf are displayed. Basically, you specify a format string that has text in it, as well as “special” characters that map to the other arguments of printf. For example, this code

     char name[20] = "Bob";
     int age = 21;
     printf( "Hello %s, you are %d years old\n", name, age );

displays the following output:

     Hello Bob, you are 21 years old

The %s means, “insert the first argument, a string, right here.” The %d indicates that the second argument (an integer) should be placed there.

The return value of printf is the number of characters printed, or a negative number if an error occurred.

Formatting Codes

There are different %-codes for different variable types, as well as options to limit the length of the variables and whatnot.

CodeFormat
%ccharacter
%dsigned integers
%isigned integers
%I64dlong long (8B integer), MS-specific
%I64uunsigned long long (8B integer), MS-specific
%escientific notation, with a lowercase “e”
%Escientific notation, with a uppercase “E”
%ffloating point
%guse %e or %f, whichever is shorter
%Guse %E or %f, whichever is shorter
%ooctal
%sa string of characters
%uunsigned integer
%xunsigned hexadecimal, with lowercase letters
%Xunsigned hexadecimal, with uppercase letters
%pa pointer
%nthe argument shall be a pointer to an integer into which is placed the number of characters written so far

Formatting Modifiers

An integer placed between a % sign and the format command acts as a minimum field width specifier, and pads the output with spaces or zeros to make it long enough. If you want to pad with zeros, place a zero before the minimum field width specifier:

     %012d

You may also specify the minimum field width in an int variable if instead of a number you put the * sign:

     int width = 12;
     int age = 100;
     printf("%*d", width, age);

You can also include a precision modifier, in the form of a .N where N is some number, before the format command:

     %012.4d

The precision modifier has different meanings depending on the format command being used:

As with field width specifier, you may use an int variable to specify the precision modifier by using the * sign:

     const char* msg = "Hello printf";
     int string_size = strlen (msg);
     printf("msg: %.*s", string_size, msg);

All of printf's output is right-justified, unless you place a minus sign right after the % sign. For example,

     %-12.4f

will display a floating point number with a minimum of 12 characters, 4 decimal places, and left justified.

You may modify the %d, %i, %o, %u, and %x type specifiers with the letter l and the letter h to specify long and short data types (e.g. %hd means a short integer).

The %e, %f, and %g type specifiers can have the letter l before them to indicate that a double follows. The %g, %f, and %e type specifiers can be preceded with the character # to ensure that the decimal point will be present, even if there are no decimal digits.

The use of the # character with the %x type specifier indicates that the hexidecimal number should be printed with the 0x prefix.

The use of the # character with the %o type specifier indicates that the octal value should be displayed with a 0 prefix.

Inserting a plus sign + into the type specifier will force positive values to be preceded by a + sign. Putting a space character ' ' there will force positive values to be preceded by a single space character.

You can also include constant escape sequences in the output string.

Related Topics: fprintf, puts, scanf, sprintf