stdio.h, cstdio int printf(const char *format, ...);
Funkcja służy do wyświetlania tekstu na standardowym wyjściu, którym domyślnie jest ekran. Jako pierwszy parametr podajesz tzw. łańcuch formatujący (format). Jest to po prostu string w którym niektóre kody (sekwencje znaków) zostaną zastąpione wartościami pozostałych parametrów.
Na przykład mamy zmienne:char *imie="Ala";int wiek=5;printf("%s ma %i lat.",imie,wiek); Wyświetli następujący tekst:Ala ma 5 lat. Jak widzisz kod %s został zastąpiony wartością zmiennej imie, a %i wiek. Poniższa tabela zawiera wykaz znaków typu w zależności od typu parametru.
Znak typu
Wartość wyjściowa
Przykładowe typy parametrów
Przykład
d
Dziesiętna ze znakiem
int, long, long long
982
i
o
Ósemkowa bez znaku
1726
u
Dziesiętna bez znaku
unsigned int, unsigned long, unsigned long long
x
Szesnastkowa bez znaku, używa małych liter
int, long, long long, unsigned int, unsigned long, unsigned long long
3d6
X
Szesnastkowa bez znaku, używa wielkich liter
3D6
e
Liczba rzeczywista (dziesiętna) w postaci wykładniczej
float, double
3.45e+3
E
Liczba zmiennoprzecinkowa w postaci wykładniczej
3.45E+3
f
Zmiennoprzecinkowa
1.03.1961
g
Zmiennoprzecinkowa, działa jak e lub f zależności od precyzji
G
Zmiennoprzecinkowa, działa jak E lub f zależności od precyzji
c
Znak
char
A
s
Łańcuch znaków
char *, char []
Ala
n
Umieszcza we wskazanym miejscu liczbę dotychczas wysłanych znaków
int *
P
Wskaźnik, wyświetla adres
A100:0012
Podając parametry w łańcuchu trzeba pamiętać o możliwości konwersji. Na przykład:char c='A';printf("Znak%c ma kod %i",c,c); Wyświetli:Znak A ma kod 65Dzieje się tak dlatego, że w drugim przypadku podając znak formatujący %i parametr (zmienna) c zostanie skonwertowana na int.Do konwersji może dochodzić również w przypadku innych znaków formatujących i typów parametrów.
Funkcja printf pozwala również na dodatkowe formatowanie. Poniższa tabela przedstawia znaki modyfikujące rozmiar parametru. Należy je podawać przed znakiem formatującym, na przykład modyfikując znak d modyfikatorem l zamiast %d piszesz %ld.
Modyfikator
Działanie
Modyfikator znaku formatującego
H
Parametr traktuje się jakby był typu short int
d, i, o, u, x, X
L
Parametr traktuje się jakby był typu long int dla parametrów całkowitych i double dla zmiennoprzecinkowych
d, i, o, u, x, Xe, E, f, g, G
Parametr traktuje się jakby był typu long double dla parametrów zmiennoprzecinkowych
e, E, f, g, G
Pamiętaj, że czasem brak modyfikatora rozmiaru powoduje błędny wyświetlenie wartości zmiennej, choć jest ona prawidłowa. Możesz wówczas stracić wiele czasu zastanawiając się dlaczego np. wynik obliczeń jest błędny, gdy w rzeczywistości jest on prawidłowy, a został jedynie źle wyświetlony. Dotyczy to zwłaszcza wielkich wartości i jest skutkiem błędnej konwersji.Możesz tez formatować wyświetlane liczby na przykład decydując ile miejsc po przycinku ma się wyświetlić. W przypadku liczb zmiennoprzecinkowych (znaki formatujące e, E, f, g, G) robisz to podając .n, gdzie n jest liczbą miejsc po przecinku, np.:float x=10.2;printf("x=%.3f\n",x);Wyświetli:x=10.200czyli 3 miejsca po przecinku. Podając .0 pomijasz w ogóle część ułamkową. Możesz też wpisać, np.:printf("x=%6.2f\n",x); wówczas 6 będzie całkowitą liczbą znaków i zostaną one wyrównane do prawej strony:x=10.20Zauważ, że "10.20" to 5 znaków, zatem do sześciu znaków będzie uzupełnione spacjami.Zastosowanie specyfikatora precyzji dla liczby całkowitej, spowoduje uzupełnienie brakujących miejsc zerami, np.:int x=12;printf("x=%.3i\n",x); wyświetli:x=012Używając funkcji printf możliwe jest również justowanie (wyrównywanie) tekstu. Flagi służące do tego celu przedstawia poniższa tabela.
Flaga
Flaga znaku formatującego
-
Wyrównuje wyświetlaną wartość do n znaków, uzupełniając brakujące miejsca spacjami po prawej stronie
X, x, E, e, f, G, g, d, i, u, s, c
+
Wyświetla znak "-" lub "+" zależnie od wartości
mat.kruk2