%[flags][width][.precision][length]specifier
The elements between between square brackets are optional.
1. Flags
Example:
#include<stdio.h>
int main(void)
{
printf("Right justification: %10d\n",42);
printf("Left justification: %-10d\n",42);
return 0;
}
/*Output:
Right justification: 42
Left justification: 42
*/
Example:
#include<stdio.h>
int main(void)
{
printf("%+d\n",10);
printf("%d\n", 10);
return 0;
}
/*Output
+10
10
*/
blank (space) - If the number is positive, there will be a space placed before the number is formatted
Example:
#include<stdio.h>
int main(void)
{
printf("% d",10);
return 0;
}
/*Output
10
*/
# -If used with o,x or X the result will be preceded by 0, 0x or 0X. If used with e, E,f, g,G the result contain a decimal point, even if there are no digits after him.
Example:
#include<stdio.h>
int main(void)
{
printf("Octal : %#o\n",10);
printf("Hexadecimal : %#x\n",10);
printf("Hexadecimal : %#X\n",10);
printf("Float : %#f\n",10.0f);
printf("Scientific lowercase : %#e\n",10.0f);
printf("Scientific uppercase : %#E\n",10.0f);
printf("Shortest form lowercase : %#g\n",10.0f);
printf("Shortest form uppercase : %#g\n",10.0f);
return 0;
}
/*Output
Octal : 012
Hexadecimal : 0xa
Hexadecimal : 0XA
Float : 10.000000
Scientific lowercase : 1.000000e+01
Scientific uppercase : 1.000000E+01
Shortest form lowercase : 10.0000
Shortest form uppercase : 10.0000
*/
Example:
#include<stdio.h>
int main(void)
{
printf("%010d",10);
return 0;
}
/*Output
0000000010
*/
2. Width
The width represents the minimum number of characters. If the formatted element's size is smaller than the specified width, the element is left-padded with blanks (spaces). It's good to know that if the element has its size greater than the specified width, he will not be truncated.
Example:
#include<stdio.h>
int main(void)
{
printf("%1d will not be truncated\n",10000);
printf("%15d\n",10000);
return 0;
}
/*Output
10000 will not be truncated
10000
*/
Example:
#include<stdio.h>
int main(void)
{
printf("The meaning of life is %*d", 5, 42);
return 0;
}
/*Output
The meaning of life is 42
*/
3. Precision
For decimal data types specifiers (d,i,o,u,x,X), precision specifies the minimum number of digits to be written. If the value to be written is shorter when compared to the precision value, the result is padded with zeros. Otherwise (if the value is longer when compared to the precision value), the result is not truncated.For the character type (c), it has no effect.
Example:
#include<stdio.h>
int main(void)
{
printf("\n%1.1c will not be affected",'I');
return 0;
}
/*Output
I will not be affected
*/
For floating point data types specifiers (e,E,f, g, G) the precision represents the number of digits to be printed after the decimal point.Example:
#include<stdio.h>
int main(void)
{
printf("\n%1.1f",3.141f);
printf("\n%1.1e",3.141f);
printf("\n%1.1E",3.141f);
printf("\n%1.1g",3.141f);
printf("\n%1.1G",3.141f);
return 0;
}
/*Output
3.1
3.1e+00
3.1E+00
3.1
3.1
*/
For strings (s), the precision represents the maximum number of characters to be written.Example:
#include<stdio.h>
int main(void)
{
printf("\n%1.3s","The bird is the word");
return 0;
}
/*Output
The
*/
When the precision is not specified, it's considered 0.
4. Length
h - the argument is interpreted as short (available for d,i,o,u,x,X)l - the argument is interpreted as long (for d,i,o,u,x,X). For the specifiers c or s, the character/string will become wide.
L - the argument is interpreted as long (for e,E,f,g,G)
5. Specifiers
- Common specifiers
- c - outputs an character (char)
- d or i - outputs an signed integer (int)
- u - outputs an unsigned integer (unsigned int)
- f - outputs an floating point number (float)
- s - outputs an string (char[] or char*)
- p - outputs an pointer address
- Less common specifiers
- e - outputs a number in the mantise/exponent form using e (example: 3e023)
- E - outputs a number in the mantise/exponent form using E (example: 5E-23)
- g - outputs the shortest form between %f and %e (as in number of characters)
- G - outputs the shortest form between %f and %E (as in number of characters)
- n - does not output the argument
- Base-conversion specifiers
- o - outputs an unsigned decimal in base-8 (octal base)
- x - outputs an unsigned decimal in base-16 (hexadecimal base) using the x character
- X - outputs an unsigned decimal in base-16 (hexadecimal base) using the X character
Example:
#include<stdio.h>
int main(void)
{
printf("Character : %c \n",'a');
printf("Integer : %d \n",32);
printf("Short integer : %hd \n",32);
printf("Long integer : %ld \n",32L);
printf("Unsigned integer : %u \n",32U);
printf("Short unsigned integer : %hu \n" 32U);
printf("Long unsigned integer : %lu \n",32UL);
printf("Float : %f \n",32.0f);
printf("Double : %f \n",32.0);
printf("Long double : %Lf \n",32.0L);
printf("String : %s \n","word");
return 0;
}
/*Output
Character : a
Integer : 32
Short integer : 32
Long integer : 32
Unsigned integer : 32
Long unsigned integer: 32
Float : 32.000000
Double : 32.000000
Long double : 32.000000
String : word
*/
\n - newline (end current line)
\t - horizontal tab (inserts tab, leaving blank space)
\v - vertical tab (ends current line and continues on the next line at the same position)
\b - backspace (deletes last character)
\r - carriage return (returns the cursor at the beginning of the line)
\f - form-feed (creates a page break for electronic documents. It is seldom used in modern environments)
\a - alert
\\ - backslash
\? - question mark
\' - single quotation mark
\" - double quotation mark
\ooo - octal number
\xhhh - hexadecimal number
\0 - null character
Example:
#include<stdio.h>
int main(void)
{
/*The text who will follow this call will be on a new line*/
printf("The bird is the word\n");
/*Inserts a horizontal tab before writing the text*/
printf("\tThe bird is the word");
/*Ends the current line and continues writing at the same position*/
printf("\vThe bird is the word\n");
/*Deletes the 'r' character from word*/
printf("The bird is the wor\bd\n");
/*Returns the cursor the begining of the line*/
printf("The bird is the word\rBird bird bird!");
/*Produces an buzz-like sound*/
printf("\nAlert\a\n");
/*Backslash, question mark and single/double quotation marks require
a backslash in order to be interpreted corectly*/
printf("\\This is a backslash.Do you have any questions\?\n");
printf("I've heard \"The bird\" is the \'word\'");
return 0;
}
/*Output
The bird is the word
The bird is the word
The bird is the word
The bird is the wod
Bird bird bird! word
Alert
\This is a backslash.Do you have any questions?
I've heard "The bird" is the 'word'
*/
Question: What tips & tricks do you know related to formatted strings?
References:
http://www.codingunit.com/printf-format-specifiers-format-conversions-and-formatted-output
No comments:
Post a Comment
Got a question regarding something in the article? Leave me a comment and I will get back at you as soon as I can!