Lompat ke konten Lompat ke sidebar Lompat ke footer

Specifier %d dan %i Bahasa C dan Fungsinya

Sebuah format specifier adalah urutan sekuensial oleh inisial tanda persen (%) yang mengindikasikan sebuah format specifier, yang digunakan untuk menentukan tipe dan format dari data untuk diambil dari stream dan menyimpannya menuju lokasi yang ditunjuk oleh argumen tambahan. Singkatnya, hal ini memberitahukan tipe dari data mana yang akan disimpan dan tipe data apa yang akan dicetak.


Sebelum lebih lanjut mempelajari materi tentang Specifier %d dan %i Bahasa C dan Fungsinya, terlebih dahulu pelajari materi tentang: Mencetak Simbol % Menggunakan Printf Bahasa C, Printf, Sprintf, dan Fprintf Bahasa C Beserta Fungsinya, dan Getc, Getchar, Getch, dan Getche Bahasa C Beserta Perbedaannya.

Contoh: jika ingin membuat program yang membaca dan mencetak integer menggunakan fungsi scanf() dan printf(), apakah menggunakan %i dan %d? Terdapat sedikit perbedaan antara format specifier %i dan %d.

"%d menentukan bilangan bulat desimal, sedangkan %i menentukan bilangan bulat."

%d dan %i Memiliki Behavior Sama Dengan printf

Tidak ada perbedaan antara format specifier %i dan %d. Perhatikan contoh berikut ini.

Contoh:

// Program C yang digunakan

// untuk mendemostrasikan

// behavior dari %1 dan %d

// dengan menggunakan

// statement printf

#include <stdio.h>

 

int main()

{

int num = 9;

 

// Mencetak nilai variabel num

// menggunakan %d

printf("Nilai dari num"

" menggunakan %%d adalah ="

" %d\n", num);

 

// Mencetak nilai variabel num

// menggunakan %i

printf("NIlai dari num"

" menggunakan %%i adalah ="

" %i\n", num);

 

return 0;

}

Output:
Nilai dari num menggunakan %d adalah = 9
Nilai dari num menggunakan %i adalah = 9

%d dan %i Memiliki Behavior Berbeda dengan scanf

Diasumsikan %d nilai basisnya adalah 10 dan %i secara otomatis mendeteksi nilai basisnya. Karena hal ini, kedua specifier tersebut memiliki perlakukan berbeda ketika keduanya digunakan sebagai input specifier. Sehingga nilai 012 yang ditampilkan sebagai 10 pada specifier %i akan ditampilakn sebagai 12 pada specifier %d.
  • %d mengambil nilai integer sebagai nilai bilangan bulat desimal, dengan kata lain %d mengambil nilai negatif beserta nilai positif tetapi nilai tersebut dalam bentuk desimal, jika tidak maka angka yang dihasilkan adalah nilai garbage.
  • %i mengambil nilai integer dengan tipe desimal, hexadesimal, dan oktadesimal. Untuk menyimpan nilai dengan format hexadesimal, nilai harus disediakan oleh preceding "0x" dan untuk nilai dengan format oktadesimal, nilai harus disediakan oleh preceding "0".

Contoh: Perhatikan program berikut ini.

// Program bahasa C untuk

// mendemonstrasikan perbedaan

// antara specifier %i dan %d

#include <stdio.h>

 

int main()

{

int a, b, c;

 

printf("Masukkan nilai a dala"

"m format desimal:");

scanf("%d", &a);

 

printf("Masukkan nilai b dala"

"m format oktadesimal: ");

scanf("%i", &b);

 

printf("Masukkan nilai c dala"

"m format hexadesimal: ");

scanf("%i", &c);

 

printf("a = %i, b = %i, c ="

" %i", a, b, c);

 

return 0;

}

Output:
Masukkan nilai a dalam format desimal:12
Masukkan nilai b dalam format oktadesimal: 012
Masukkan nilai c dalam format hexadesimal: 0x12
a = 12, b = 10, c = 18

Penjelasan:
  • Nilai desimal dari a dengan nilai 12 adalah 12.
  • Nilai desimal dari b dengan nilai 12(oktadesimal) adalah 10.
  • Nilai desimal dari c dengan nilai 12(hexadesimal) adalah 18.

Baca Juga:

Kelebihan dari Specifier %d dan %i dalam Bahasa C

Dalam bahasa pemrograman C, specifier %d dan %i digunakan untuk memformat output dari nilai integer. Meskipun keduanya seringkali digunakan secara bergantian, ada beberapa kelebihan yang perlu dipertimbangkan ketika memilih antara keduanya:
  • Kejelasan dalam Representasi Desimal: %d lebih jelas dalam merepresentasikan bilangan bulat dalam basis desimal. Saat menggunakan %d, compiler menginterpretasikan nilai integer sebagai bilangan bulat dalam basis 10. Ini memberikan kejelasan yang jelas kepada pembaca kode bahwa nilai yang dicetak adalah dalam format desimal.
  • Fleksibilitas dalam Interpretasi Basis Bilangan: Meskipun %d secara khusus menginterpretasikan nilai integer dalam basis desimal, %i lebih fleksibel karena dapat menginterpretasikan nilai dalam basis oktal (basis 8), heksadesimal (basis 16), atau desimal (basis 10) tergantung pada awalan yang diberikan pada input. Misalnya, jika nilai integer dimulai dengan '0' (nol), compiler akan menganggapnya sebagai oktal. Jika dimulai dengan '0x' atau '0X', compiler akan menganggapnya sebagai heksadesimal. Dengan demikian, %i memungkinkan interpretasi yang lebih luas dari nilai bilangan.
  • Mendukung Representasi yang Fleksibel: Selain fleksibilitas dalam basis bilangan, %i juga mendukung representasi fleksibel untuk nilai integer. Ini memungkinkan penggunaan tanda negatif (-) dan positif (+) untuk nilai integer. Misalnya, %i akan mencetak bilangan bulat negatif sebagai (-), sementara %d akan mengabaikan tanda negatif tersebut.
  • Kompatibilitas dengan Input Variabel: Specifier %i lebih cocok digunakan dalam situasi di mana input variabelnya bisa berupa berbagai bentuk bilangan, termasuk desimal, heksadesimal, dan oktal. Ini memudahkan penggunaan %i saat membaca nilai dari input yang mungkin memiliki format yang berbeda.
  • Fleksibilitas dalam Manipulasi Bilangan: Ketika menggunakan %i, pengembang memiliki kemampuan untuk melakukan operasi matematika yang lebih fleksibel langsung di dalam specifier. Misalnya, dapat menambahkan atau mengurangkan nilai integer yang dibaca tanpa perlu melakukan konversi basis bilangan. 
  • Konsistensi dalam Penggunaan: Meskipun %d adalah specifier yang spesifik untuk bilangan bulat dalam basis desimal, penggunaan %i dapat membawa konsistensi dalam penggunaan specifier, terutama jika sering berurusan dengan input yang memiliki berbagai format bilangan.
  • Konsistensi dengan Standar Bahasa C: Meskipun %d lebih spesifik untuk basis bilangan desimal dan %i lebih fleksibel dalam interpretasi basis bilangan, keduanya tetap sesuai dengan standar bahasa C. Hal ini memastikan bahwa kode yang menggunakan specifier ini akan kompatibel dengan berbagai kompiler C yang berbeda.
  • Kemudahan Dalam Membaca Kode: Kedua specifier ini umum digunakan dan dikenal oleh banyak pengembang. Penggunaan %d untuk nilai bilangan bulat dalam basis desimal dan %i untuk nilai bilangan dengan basis yang bisa bervariasi membuat kode menjadi lebih mudah dipahami dan dipelihara oleh pengembang lain.
  • Kemampuan dalam Pemformatan Output: Baik %d maupun %i dapat digunakan bersama dengan spesifikasi pemformatan tambahan, seperti lebar minimum, presisi, dan tanda. Hal ini memberikan fleksibilitas dalam menyesuaikan tampilan output sesuai kebutuhan aplikasi.
  • Pilihan yang Sesuai dengan Kebutuhan: Penggunaan specifier %d atau %i dapat disesuaikan dengan kebutuhan spesifik aplikasi. Jika nilai yang akan dicetak secara eksplisit dalam basis desimal, %d dapat menjadi pilihan yang lebih jelas. Namun, jika nilai dapat bervariasi antara berbagai basis bilangan, %i memberikan fleksibilitas yang lebih besar.

Meskipun specifier %d dan %i memiliki banyak kelebihan, ada beberapa kekurangan yang perlu dipertimbangkan:
  • Keterbatasan dalam Interpretasi Basis Bilangan: Meskipun %i memungkinkan interpretasi yang lebih luas dari nilai bilangan dalam berbagai basis (desimal, oktal, heksadesimal), hal ini juga dapat menyebabkan ambiguitas atau kesalahan interpretasi jika tidak digunakan dengan hati-hati. Penggunaan %i dengan nilai input yang tidak konsisten atau tidak terduga dapat menghasilkan hasil yang tidak diinginkan.
  • Kesulitan dalam Pemeliharaan Kode: Penggunaan specifier %i yang fleksibel dapat membuat kode menjadi lebih sulit dipahami dan dipelihara, terutama jika nilai input tidak konsisten dalam berbagai basis bilangan. Hal ini dapat mengakibatkan kesulitan dalam memahami kode dan menemukan kesalahan jika terjadi.
  • Resiko Konversi Otomatis yang Tidak Diinginkan: Ketika menggunakan %i, ada resiko konversi otomatis dari nilai input yang mungkin tidak diinginkan. Misalnya, jika sebuah string input dimulai dengan '0x' atau '0X', compiler akan menganggapnya sebagai nilai heksadesimal. Hal ini dapat menyebabkan perbedaan hasil yang tidak diinginkan tergantung pada format nilai input.
  • Keterbatasan dalam Representasi Desimal yang Jelas: Meskipun %i dapat digunakan untuk merepresentasikan nilai dalam basis desimal, penggunaan specifier yang lebih spesifik seperti %d mungkin lebih jelas dan dapat membantu memperjelas niat pengembang dalam kode program.
  • Potensi Konflik dengan Tipe Data Lain: Penggunaan %i yang lebih fleksibel dapat menyebabkan potensi konflik dengan tipe data lain, terutama jika penggunaan specifier ini tidak konsisten atau tidak sesuai dengan tipe data yang diharapkan.

Dengan mempertimbangkan kekurangan-kekurangan ini, penting bagi pengembang untuk menggunakan specifier %d dan %i dengan hati-hati dan memastikan bahwa penggunaannya sesuai dengan kebutuhan dan konteks penggunaan dalam kode program. Hal ini akan membantu mengurangi risiko kesalahan dan meningkatkan kejelasan serta pemeliharaan kode dalam jangka panjang.

Kesimpulan

Keduanya, specifier %d dan %i, memiliki kelebihan masing-masing yang perlu dipertimbangkan tergantung pada kebutuhan dan konteks penggunaan. %d lebih tepat untuk merepresentasikan bilangan bulat dalam basis desimal dengan kejelasan yang jelas, sementara %i menawarkan fleksibilitas dalam interpretasi basis bilangan dan representasi nilai integer yang lebih luas. Dengan memahami kelebihan-kelebihan ini, pengguna dapat membuat pilihan yang tepat sesuai dengan kebutuhan spesifik aplikasi.

Referensi Tambahan:

Artikel ini didedikasikan kepada: Anisya Sekar Sari, Arvidhea Safira Gunawan, Dovan Ardy Setyawan, Dyas Sangga Anggita, dan Elisa Martha Hanum Basyaroh.

5 komentar untuk "Specifier %d dan %i Bahasa C dan Fungsinya"

  1. %d adalah format penentu untuk nilai integer dalam desimal yang diguakan dalam fungsi output yang diformat dalam printf() untuk mengeluarkan nilai apapun dari jenis bilangan bulat dalam desimal dan digunakan untuk mengambil inputan jenis bilangan bulat dalam desimal melalui fungsi scanf().

    BalasHapus
  2. %d seperti yang sering digunakan dalam beberapa fungsi lainnya dalam bahasa C, sebenarnya bukan bagian dari bahasa C, melainkan bagian dari standard library.

    Khususnya adalah "printf", "scanf", dan semua fungsi turunannya.

    BalasHapus
  3. %d digunakan untuk memformat keluaran output dari integer menggunakan printf() atau fprintf() dalam bahasa C.

    Tanda "%" pada "%d" menunjukkan bahwa fungsi tersebut akan mengubah bagian dari teks input dengan beberapa variabel yang akan diteruskan sebagai argumen. Tanda "d" pada "%d" berarti adalah variabel integer.

    BalasHapus
  4. Dalam bahasa pemrograman C, nilai-nilai akan disimpan dalam memori dalam bentuk integer, char, double, fload, dan lain sebagainya.

    Jadi tipe data yang diperlukan tersebut akan disimpan sesuai dengan tipe data yang diperlukan oleh user. Namun, jika ingin menyimpan nilai dalam tipe integer atau format lain, maka dibutuh suatu penanda untuk dapat mencetak nilai integer tersebut secara khsusu.

    Dalam bahasa C cara untuk mencetak nilai tersebut adalah dengan menggunakan "%" dan disertai simbol untuk menunjukkan tipe data tertentu.

    1. %d digunakan untuk menampilkan nilai dengan tipe data bilangan bulat.

    2. %c digunakan untuk menampilkan nilai dengan tipe data karakter tunggal.

    3. %f digunakan untuk menampilkan nilai dengan tipe data float atau bilangan berkoma.

    4. %lf digunakan untuk menampilkan nilai dengan tipe data double.

    BalasHapus
  5. Dalam bahasa pemrograman C, %d dan %i adalah format penentu dimana %d digunakan untuk menampilkan nilai dengan tipe varibel desimal, dan %i adalah untuk tipe data integer.

    Tidak ada perbedaan dalam output fungsi printf() saat mencetak nilai menggunakan %d dan %i tetapi jika menggunakan scanf, maka akan terdapat perbedaan dari penggunakan kedua specifier tersebut.

    BalasHapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -