printf format referens

.

2022-12-27

# 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

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
“`