<title>printf format identifiers.</title> <head> <script language="JavaScript"> </script> </head> <body bgcolor="#ffffcc"> <hr> <center> <h1>printf format identifiers.</h1> </center> <hr> <p> printf formatting is controlled by 'format identifiers' which, are shown below in their simplest form. <p> <center> <table border bgcolor="ivory" width="80%"> <tr> <td> <pre> %d %i Decimal signed integer. %o Octal integer. %x %X Hex integer. %u Unsigned integer. %c Character. %s String. See below. %f double %e %E double. %g %G double. %p pointer. %n Number of characters written by this printf. No argument expected. %% %. No argument expected. </pre> </td> <tr> </table> </center> <p> These identifiers actually have upto 6 parts as shown in the table below. They MUST be used in the order shown. <p> <center> <table border bgcolor="ivory" width="80%"> <tr align=center> <td><a href="#percent">%</a></td> <td><a href="#flags">Flags</a></td> <td><a href="#width">Minimum field width</a></td> <td><a href="#period">Period</a></td> <td><a href="#precision">Precision. Maximum field width</a></td> <td><a href="#id">Argument type</a></td> </tr> <tr align=center> <td>Required</td> <td>Optional</td> <td>Optional</td> <td>Optional</td> <td>Optional</td> <td>Required</td> </table> </center> <p> <a name=percent> <hr> <h2>%</h2> The % marks the start and therfore is manatory. <p> <a name=flags> <hr> <h2>Flags</h2> The format identifers can be altered from their default function by applying the following <b>flags</b>: <p> <center> <table border bgcolor="ivory" width="80%"> <tr> <td> <pre> - Left justify. 0 Field is padded with 0's instead of blanks. + Sign of number always O/P. blank Positive values begin with a blank. # Various uses: %#o (Octal) 0 prefix inserted. %#x (Hex) 0x prefix added to non-zero values. %#X (Hex) 0X prefix added to non-zero values. %#e Always show the decimal point. %#E Always show the decimal point. %#f Always show the decimal point. %#g Always show the decimal point trailing zeros not removed. %#G Always show the decimal point trailing zeros not removed. </pre> </td> </tr> </table> </center> <ul> <li>The flags must follow the <a href="#percent">%</a>. <li>Where it makes sense, more than one flag can be used. </ul> Here are a few more examples. <p> <center> <table border bgcolor="ivory" width="80%"> <tr> <td> <pre> printf(" %-10d \n", number); printf(" %010d \n", number); printf(" %-#10x \n", number); printf(" %#x \n", number); </pre> </td> </tr> </table> </center> <p> <a name=width> <hr> <h2>Minimum field width.</h2> By default the width of a field will be the minimum required to hold the data. If you want to increase the field width you can use the following syntax. <p> <center> <table border bgcolor="ivory" width="80%"> <tr> <td> <pre> main() { int number = 5; char *pointer = "little"; printf("Here is a number-%4d-and a-%10s-word.\n", number, pointer); } /********************************* * * Program result is: * * Here is a number- 5-and a- little-word. * *********************************/ </pre> </td> </tr> </table> </center> <p> As you can see, the data is right justified within the field. It can be left justified by using the <a href="#flags">- flag</a>. A <a href="#precision">maximum string</a> width can also be specified. <p> The width can also be given as a variable as shown below. <p> <center> <table border bgcolor="ivory" width="80%"> <tr> <td> <pre> main() { int number=5; printf("---%*d----\n", 6, number); } /********************************* * * Program result is: * * ---- 5--- * *********************************/ </pre> </td> </tr> </table> </center> <p> The * is replaced with the supplied <b>int</b> to provide the ability to dynamically specify the field width. <p> <hr> <a name=period> <h2>Period</h2> If you wish to specify the <a href="#precision">precision</a> of an argument, it MUST be prefixed with the period. <p> <a name=precision> <hr> <h2>Precision</h2> The Precision takes different meanings for the different format types. <h3>Float Precision</h3> <pre> %8.2f </pre> This says you require a total field of 8 characters, within the 8 characters the last 2 will hold the decimal part. <pre> %.2f </pre> The example above requests the minimum field width and the last two characters are to hold the decimal part. <h3>Character String Maximum field width</h3> The precision within a string format specifies the maximum field width. <pre> %4.8s </pre> Specifies a minimum width of 4 and a maximum width of 8 characters. If the string is greater than 8 characters, it will be cropped down to size. <p> <img src=../../GRAPHICS/computer.gif> <a href=../EXAMPLES/sprintf1.c>Here is a little program</a> that shows an alternative to <a href=strncpy.html>strncpy</a>. <h3>* Precision</h3> As with the 'width' above, the precision does not have to be hard coded, the * symbol can be used and an integer supplied to give its value. <p> <hr> <a name=id> <h2>Format Identifiers</h2> The format identifier describes the expected data. The identifier is the character that ends Here is a list of the format identifers as used in 'printf' ,'sprintf' ,'fprintf' and 'scanf'. <ol> <li>Except for '%' and 'n', all the identifiers expect to extract an argument from the <b>printf</b> parameter list. <li>All of the parmameters should be the value to be inserted. EXCEPT %s, this expects a <a href="../CONCEPT/pointers.html"> pointer</a> to be passed. </ol> <h2>An example.</h2> <p> <center> <table border bgcolor="ivory" width="80%"> <tr> <td> <pre> main() { int number=5; char *pointer="little"; printf("Here is a number %d and a %s word.\n", number, pointer); } /********************************* * * Program result is: * * Here is a number 5 and a little word. * *********************************/ </pre> </td> </tr> </table> </center> <p> <hr> <p> <center> <table border=2 width="80%" bgcolor="ivory"> <tr align=center> <td width="25%"> <a href="../cref.html"> Top</a> </td><td width="25%"> <a href="../master_index.html"> Master Index</a> </td><td width="25%"> <a href="../SYNTAX/keywords.html"> Keywords</a> </td><td width="25%"> <a href="funcref.htm"> Functions</a> </td> </tr> </table> </center> <p> <hr> <address>Martin Leslie </address><p> </body> </html>