printf format referens
Blog Post by Stefan Holmberg
printf
int printf ( const char * format, ... );
Skriver formatterad data till stdout (console om ej redirected)
Skriver C strängen som parametern format pekar på. Om format innehåller format specifiers (sekvenser som börjar med % ) så kommer argument på slutet stoppas in på respektive plats (by index) och byta ut sess dpecifier.
Parametrar
format
C sträng som innehåller texten som ska skrivas till konsolen (stdout) Format specifiers är optional, och dessa kan dessutiom innehålla ytterligare information:
En format specifier följer detta mönster:
%[flags][width][.precision][length]specifier
specifier - delen är den mest signifikanta, eftersom det avser datatypen
specifier | Output | Example |
---|---|---|
d or i | Signed decimal integer | 900 |
u | Unsigned decimal integer | 4511 |
o | Unsigned octal | 601 |
x | Unsigned hexadecimal integer | 8fa |
X | Unsigned hexadecimal integer (uppercase) | 8FA |
f | Decimal floating point, lowercase | 492.65 |
F | Decimal floating point, uppercase | 492.65 |
e | Scientific notation (mantissa/exponent), lowercase | 4.9265e+2 |
E | Scientific notation (mantissa/exponent), uppercase | 4.9265E+2 |
g | Use the shortest representation: %e or %f | 492.65 |
G | Use the shortest representation: %E or %F | 492.65 |
a | Hexadecimal floating point, lowercase | -0xc.90fep-2 |
A | Hexadecimal floating point, uppercase | -0XC.90FEP-2 |
c | Character | a |
s | String of characters | sample |
p | Pointer address | b8000000 |
n | Nothing printed.The corresponding argument must be a pointer to a signed int. The number of characters written so far is stored in the pointed location. | |
% | A % followed by another % character will write a single % to the stream. | % |
Format specifiern kan också innehålla delarna: flags, width, .precision och modifiers (i den ordningen)
flags | description |
---|---|
- | Vänster-justera inom givna fältets bredd. Högerjustering är default |
+ | Sätt ett plus eller minus framför tal () . Default = endast negativa får ett prefix (minus såklart) |
(space) | Om inget plus eller minus ska skrivas sätt ett dett blanktecken (space) innan |
# | Används med o, x eller X specifiers the value is preceeded with 0, 0x or 0X respectively for values different than zero. Used with a, A, e, E, f, F, g or G it forces the written output to contain a decimal point even if no more digits follow. By default, if no digits follow, no decimal point is written. |
0 | Left-pads the number with zeroes (0) instead of spaces when padding is specified (see width sub-specifier). |
width | description |
---|---|
(number) | Minsta antalet tecken som ska skrivas ut. Om antalet tecken är färre än detta nummer så kommer resultatet paddas med blanktecken.OBS: Värder trunkueras dock aldrig |
* | Bredden specificeras inte i formatsträngen utan som ytterligare ett heltalsvärde som kommer innan värdet som ska formatteras |
.precision | description |
---|---|
.number | För integer (heltal) (d, i, o, u, x, X): precision specificerar det minsta antalet tecken som sla skrivas. Om antalet tecken är färre än detta nummer så kommer resultatet paddas (utfyllas) med nollor i början. Värdet trunkeras aldrig även om resultatet är längre. Precision "0" betyder att inget tecken skrivs för värdet 0. För a, A, e, E, f och F specifiers betyder detta antalet siffror som ska skrivas efter decimalpunkten ( default = 6 decimaler). För g och G specifiers: maximala antalet signifikanta siffror som ska skrivas. För s: maximalt antal tecken som ska skrivas. Default = alla tecken till null hittas skrivs ut |
* | Precisionen specificeras inte i formatsträngen utan som ytterligare ett heltalsvärde som kommer innan värdet som ska formatteras. |
The length sub-specifier modifies the length of the data type. This is a chart showing the types used to interpret the corresponding arguments with and without length specifier (if a different type is used, the proper type promotion or conversion is performed, if allowed):
specifiers
length | d i | u o x X | f F e E g G a A | c | s | p | n |
---|---|---|---|---|---|---|---|
(none) | int | unsigned int | double | int | char* | void* | int* |
hh | signed char | unsigned char | signed char* | ||||
h | short int | unsigned short | int short int* | ||||
l | long int | unsigned long int | wint_t | wchar_t* | long int* | ||
ll | long long int | unsigned long long int | long long int* | ||||
j | intmax_t | uintmax_t | intmax_t* | ||||
z | size_t | size_t | size_t* | ||||
t | ptrdiff_t | ptrdiff_t | ptrdiff_t* | ||||
L | long double |
Returnerar
Om det går bra, returneras totala antalet tecken som skrivits Om fel returneras ett negativt tal och ferror sätts
Exempel
/* printf example */
#include <stdio.h>
int main()
{
printf ("Characters: %c %c \n", 'a', 65);
printf ("Decimals: %d %ld\n", 1977, 650000L);
printf ("Preceding with blanks: %10d \n", 1977);
printf ("Preceding with zeros: %010d \n", 1977);
printf ("Some different radices: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
printf ("floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);
printf ("Width trick: %*d \n", 5, 10);
printf ("%s \n", "A string");
return 0;
}
Output
Characters: a A
Decimals: 1977 650000
Preceding with blanks: 1977
Preceding with zeros: 0000001977
Some different radices: 100 64 144 0x64 0144
floats: 3.14 +3e+000 3.141600E+000
Width trick: 10
A string