Jak wspominaliśmy wcześniej funkcja printf służy do wyprowadzania danych na standardowe wyjście. Jest ona jedną z najczęściej używanych funkcji języka podstawowego, a jej wywołanie ma ogólną formę:
Wzorzec wyprowadzania składa się ze wzorców (formatów) konwersji. Wzorce konwersji umożliwiają kontrolę nad wyprowadzanym tekstem.
W cudzysłowie oprócz tekstu i wzorców konwersji spotkać można także tzw. sekwencje ucieczki. Są to symbole zaczynające się od znaku \ (ukośnik, backslash). Jedynie, aby uzyskać znak procentu % musimy posłużyć się sekwencją ucieczki funkcji printf, czyli znakiem procentu.
Kilka przykładów ilustrujących działanie funkcji printf znajdziemy w pliku drukuj.c. Na początku wyprowadzimy dwa razy ten sam napis różnymi metodami. Już wcześniej wspominaliśmy, że znaki w cudzysłowie są domyślnie tekstem (literałem łańcuchowym). Tekst może być uzyskiwany także poprzez wzorzec konwersji %s. Będzie to przydatne wtedy, kiedy będziemy posługiwali się nazwami zmiennych do wyprowadzania tekstów. Warto zauważyć, że funkcja printf nie przenosi kursora automatycznie do nowej linii; należy posłużyć się sekwencją ucieczki \n. Jest to symboliczny opis znaku, który odpowiada symbolicznemu kodowi znaku: \12 (ósemkowo) lub \XA (szesnastkowo). Znak nowej linii może być umieszczany w dowolnym miejscu w tekście - umożliwia to podzielenie zdania czy słowa na dwa wiersze.
Każde wystąpienie znaku \ (ukośnik, backslash) informuje kompilator, że następujący za nim znak należy specjalnie traktować. Każde wystąpienie sekwencji ucieczki traktowane jest jak jeden znak. Dlatego wartość dziesiątkowa znaku zapisanego ósemkowo lub szesnastkowo powinna odpowiadać jakiemuś kodowi w tabeli ASCII (wartości od 0 do 255). Wspomniany znak nowej linii w tabeli ASCII ma dziesiątkową wartość równą 10.
Program drukuj jest złożony z kilku instrukcji printf. Każde zdanie jest wykonywane zgodnie z kolejnością występowania w kodzie, od lewej do prawej i z góry w dół. Sekwencyjność jest cechą programowania w C.
Przenoszenia tekstu w kodzie do następnej linii prezentują dwie kolejne instrukcje printf. W pierwszym przypadku na końcu literału łańcuchowego umieszczamy samotny ukośnik \, a kontynuowanie wyprowadzanego tekstu rozpoczyna się od pierwszego znaku nowej linii. Dlatego nie można pozwolić sobie - w celu przejrzystości kodu - na dodatkowe spacje czy tabulacje w nowej linii, gdyż wszystko to zostanie wydrukowane na ekranie. Druga z przedstawionych metod jest bardziej elastyczna, a kod bardziej czytelny. Jest ona związana z właściwością literału łańcuchowego (tekstu), polegającą na tym, że każda para sąsiadujących ze sobą literałów tekstowych jest niejawnie ze sobą łączona w jeden literał tego typu, składający się ze wszystkich znaków połączonych tekstów. Przykładowo te dwa napisy są sobie równoważne:
"Hello" "," " " "world"
"Hello, world"
Kolejne instrukcje printf pokazują zasadę działania dwóch innych sekwencji ucieczki: powrotu oraz cofnięcia karetki. W tym pierwszym przypadku użycie kodu \r (carriage return) powoduje przesunięcie kursora do początku bieżącej linii; nie implikuje to wyczyszczenia zawartości tego wiersza, lecz ponowne drukowanie informacji na ekranie jednocześnie wymazuje jego wcześniejszą zawartość. Natomiast po wpisaniu \b (backspace) kursor cofa się o jedną pozycję w lewo; znak przed sekwencją ucieczki nie jest niszczony, ale zostanie zastąpiony nowowprowadzonym na ekran.