Fungsi printf adalah pintu gerbang setiap program C ke layar pengguna. Tanpa printf, kita tidak punya cara mudah untuk melihat hasil perhitungan, status program, atau pesan kesalahan yang sedang terjadi. Fungsi ini didefinisikan di header <stdio.h> dan menjadi salah satu fungsi paling sering dipakai di seluruh ekosistem C. Pada chapter ini kita akan memahami bagaimana printf bekerja, bagaimana pola format stringnya menentukan output, serta bagaimana kita menggabungkan teks biasa dengan nilai variabel menjadi satu baris keluaran yang rapi.
Cara Kerja printf #
Fungsi printf menerima sebuah format string yang berisi teks biasa dan conversion specifier (penanda konversi) yang diawali tanda persen %. Setiap penanda konversi akan diganti dengan nilai variabel yang dilewatkan sebagai argumen setelah string. Compiler tidak selalu memeriksa kecocokan tipe argumen dengan penanda konversi, sehingga tanggung jawab menjaga kesesuaian tipe ada di tangan programmer.
Mari kita mulai dari bentuk paling sederhana, yaitu mencetak teks tanpa variabel sama sekali:
#include <stdio.h>
int main(void) {
printf("Halo Dunia!\n");
printf("Belajar bahasa C bersama-sama.\n");
return 0;
}Output yang Dihasilkan:
Halo Dunia!
Belajar bahasa C bersama-sama.Mari kita telaah baris-baris kode di atas:
- Baris 1 (
#include <stdio.h>): menyertakan header Standard Input/Output sehingga deklarasi fungsiprintfdapat dikenali oleh compiler. - Baris 4 (
printf("Halo Dunia!\n");): memanggilprintfdengan satu argumen berupa string literal. Karakter\ndi akhir berarti pindah baris setelah teks dicetak. - Baris 5 (
printf("Belajar...");): pemanggilan kedua yang mencetak teks berbeda di baris baru karena baris sebelumnya diakhiri\n. - Baris 6 (
return 0;): mengakhiri fungsimaindan mengembalikan0ke sistem operasi sebagai tanda program sukses.
Menggabungkan Teks dengan Nilai Variabel #
Kekuatan printf baru terasa ketika kita mencetak nilai variabel bersama teks. Setiap tipe data memiliki penanda konversi sendiri: %d untuk int, %f untuk float dan double, %s untuk string (array char), dan %c untuk karakter tunggal.
#include <stdio.h>
int main(void) {
char nama[] = "Budi";
int umur = 17;
float tinggi = 168.5f;
printf("Nama : %s\n", nama);
printf("Umur : %d tahun\n", umur);
printf("Tinggi : %.1f cm\n", tinggi);
return 0;
}Output yang Dihasilkan:
Nama : Budi
Umur : 17 tahun
Tinggi : 168.5 cmMari kita telaah baris-baris kode di atas:
- Baris 4 (
char nama[] = "Budi";): mendeklarasikan arraycharbernamanamasekaligus mengisinya dengan string"Budi". - Baris 5 (
int umur = 17;): variabel bertipeintbernamaumurdiisi nilai17. - Baris 6 (
float tinggi = 168.5f;): variabelfloatdiisi168.5. Akhiranfmenandakan literal bertipefloat, bukandouble. - Baris 8 (
printf("Nama : %s\n", nama);): penanda%sdiganti dengan isi arraynama, yaitu string"Budi". - Baris 9 (
printf("Umur : %d tahun\n", umur);): penanda%ddiganti dengan nilaiintdari variabelumur. - Baris 10 (
printf("Tinggi : %.1f cm\n", tinggi);): penanda%.1fmencetakfloatdengan satu angka di belakang koma. Tanpa.1, output akan menampilkan enam digit desimal secara default.
Lebar Field dan Presisi #
printf mendukung pengaturan field width (lebar kolom minimum) dan precision (jumlah digit setelah titik desimal). Sintaksnya %[lebar].[presisi][tipe]. Pengaturan ini sangat berguna untuk mencetak tabel atau laporan yang kolomnya harus rata.
#include <stdio.h>
int main(void) {
int jumlah = 42;
float harga = 12500.75f;
/* Tanpa format lebar */
printf("Jumlah: %d\n", jumlah);
printf("Harga : %f\n", harga);
/* Dengan format lebar dan presisi */
printf("Jumlah: %5d\n", jumlah);
printf("Harga : %10.2f\n", harga);
return 0;
}Output yang Dihasilkan:
Jumlah: 42
Harga : 12500.750000
Jumlah: 42
Harga : 12500.75Mari kita telaah baris-baris kode di atas:
- Baris 9 (
printf("Jumlah: %d\n", jumlah);): mencetak42tanpa padding, sehingga langsung menempel setelah titik dua. - Baris 10 (
printf("Harga : %f\n", harga);):%ftanpa presisi mencetak enam digit desimal default, yaitu12500.750000. - Baris 13 (
printf("Jumlah: %5d\n", jumlah);):%5dartinya cadangkan minimum 5 kolom dan rata kanan. Karena42hanya dua digit,printfmenambahkan tiga spasi di depannya. - Baris 14 (
printf("Harga : %10.2f\n", harga);):%10.2fartinya total lebar minimum 10 kolom dengan tepat 2 digit desimal. Output menjadi12500.75(dua spasi di depan).