Array initialization
int a[4] = {[2] = 6, [3] = 7};
int grid[100][100] = [0][0] = 8, [50][25] = 7};
Structure initialization
struct address {
int street_no;
char *street_name;
char *city;
char *prov;
char *postal_code;
};
struct address temp_address = { .city = "Hamilton", .prov = "Ontario" };
struct a {
struct b {
int c;
int d;
} e;
float f;
} g = {.e.c = 3 };
Union initialization
union {
char birthday[9];
int age;
float weight;
} people = { .age = 14 };
printf format
%[flags][min field width][precision][length]conversion specifier
where:
flags:
# Alternate
0 zero pad
- left align
+ explicit + - sign
space for + sign
' locale thousands grouping
I Use locale's alt digits
min field width: #,*
precision: .#, .*
length:
hh char
h short
l long
ll long long
j [u]intmax_t
z size_t
t ptrdiff_t
L long double
conversion specifier:
c unsigned char
d signed int
u unsigned int
x unsigned hex int
X unsigned HEX int
e [-]d.ddde±dd double,
E [-]d.dddE±dd double
Examples:
printf("%08X", var); 00001234
printf("%20s","string"); string (right aligned)
printf("%*s", 20, "string"); string (right aligned, the alignment is specified as an argument)
printf("%-20s", "string"); string (left aligned)
printf("%-20.20s", "string"); string (the string is truncated if it is too long)
