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:

c
#include <stdio.h>

int main(void) {
    printf("Halo Dunia!\n");
    printf("Belajar bahasa C bersama-sama.\n");
    return 0;
}

Output yang Dihasilkan:

text
Halo Dunia!
Belajar bahasa C bersama-sama.

Mari kita telaah baris-baris kode di atas:

  1. Baris 1 (#include <stdio.h>): menyertakan header Standard Input/Output sehingga deklarasi fungsi printf dapat dikenali oleh compiler.
  2. Baris 4 (printf("Halo Dunia!\n");): memanggil printf dengan satu argumen berupa string literal. Karakter \n di akhir berarti pindah baris setelah teks dicetak.
  3. Baris 5 (printf("Belajar...");): pemanggilan kedua yang mencetak teks berbeda di baris baru karena baris sebelumnya diakhiri \n.
  4. Baris 6 (return 0;): mengakhiri fungsi main dan mengembalikan 0 ke 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.

c
#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:

text
Nama    : Budi
Umur    : 17 tahun
Tinggi  : 168.5 cm

Mari kita telaah baris-baris kode di atas:

  1. Baris 4 (char nama[] = "Budi";): mendeklarasikan array char bernama nama sekaligus mengisinya dengan string "Budi".
  2. Baris 5 (int umur = 17;): variabel bertipe int bernama umur diisi nilai 17.
  3. Baris 6 (float tinggi = 168.5f;): variabel float diisi 168.5. Akhiran f menandakan literal bertipe float, bukan double.
  4. Baris 8 (printf("Nama : %s\n", nama);): penanda %s diganti dengan isi array nama, yaitu string "Budi".
  5. Baris 9 (printf("Umur : %d tahun\n", umur);): penanda %d diganti dengan nilai int dari variabel umur.
  6. Baris 10 (printf("Tinggi : %.1f cm\n", tinggi);): penanda %.1f mencetak float dengan 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.

c
#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:

text
Jumlah: 42
Harga : 12500.750000
Jumlah:    42
Harga :   12500.75

Mari kita telaah baris-baris kode di atas:

  1. Baris 9 (printf("Jumlah: %d\n", jumlah);): mencetak 42 tanpa padding, sehingga langsung menempel setelah titik dua.
  2. Baris 10 (printf("Harga : %f\n", harga);): %f tanpa presisi mencetak enam digit desimal default, yaitu 12500.750000.
  3. Baris 13 (printf("Jumlah: %5d\n", jumlah);): %5d artinya cadangkan minimum 5 kolom dan rata kanan. Karena 42 hanya dua digit, printf menambahkan tiga spasi di depannya.
  4. Baris 14 (printf("Harga : %10.2f\n", harga);): %10.2f artinya total lebar minimum 10 kolom dengan tepat 2 digit desimal. Output menjadi 12500.75 (dua spasi di depan).