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

© Copyright Systementor AB. All Rights Reserved
Version: 1.0.20240904.1-74e3242