03 December, 2014

Memahami Fungsi fgets Dalam Menginput Data

Dalam menangkap sebuah inputan melalui stream pada bahasa C, tentunya sejauh ini yang diketahui ialah fungsi scanf. Dan yang perlu diketahui ialah, pada bahasa C terdapat beberapa standard input yang dapat digunakan untuk menangkap sebuah inputan melalui stream, umumnya perangkat yang digunakan jadi sumber data ialah keyboard. Jadi, pada kali ini akan dibahas mengenai "penggunaan fungsi fgets dalam menginput data" dan menjadikan fungsi tersebut sebagai alternatif dari fungsi scanf. Sebelum memulai membahas penggunaan fungsi fgets, mari kilas balik menelusuri si fungsi scanf.

Penggunaan Scanf yang Buruk

Di saat menggunakan fungsi scanf dalam memporeleh data dari user, pernahkah terpikir mengapa fungsi tersebut dapat memperbaharui isi dari variabel yang telah di deklarasikan sebelumnya? Oke, asumsi saya punya variabel array char nama[20];, kemudian dilakukan input data scanf("%19s", &bil);. Dari sintaks tersebut, bisa dilihat pada bagian notasi penandaan variabel "%19s" kita memberikan ukuran dari si variabel, jadi si scanf akan membaca dan mengambil 19 karakter dari keyboard untuk dimasukkan ke block penyimpanan si variabel nama berada, karakter ke 20 adalah terminator '\0'. Di bagian kedua, kita memberikan alamat penyimpanan variabel nama di dalam memory ke si fungsi scanf agar fungsi tersebut dapat memperbaharui isi variabel nama.

Lalu, keburukannya terletak dimana? Hal buruk itu terjadi ketika:
  1. Tidak menyertakan ukuran data yang dapat ditampung variabel array pada notasi "%19s" (seperti pada contoh di atas). Lupa akan hal ini akan mengakibatkan kehancuran program yang kita buat, ya tentu saja, scanf akan memasukkan seluruh karakter ke dalam block memory meskipun jumlah karakter yang diberikan melebihi ukuran dari variabel array yang kita miliki.
  2. Jika kita memberikan spasi saat menginput data, maka spasi akan menjadi tanda akhir dari deretan karakter yang diinput, meskipun sesungguhnya spasi tersebut merupakan bagian dari data yang akan diberikan. Mis: Hendro Naga. Maka kita akan memperoleh Hendro saja sebagai isi dari variabel array kita. Sial benerrrr.... :D

Lalu, kapan sebaiknya fungsi scanf ini digunakan? Jika ingin menginput data berupa bilangan, gunakan fungsi ini. Kemudian, jika ingin menginput dua nilai variabel sekaligus, gunakan fungsi ini, dan jika ingin menginput data bertipe struct, fungsi ini dapat digunakan dengan baik.

Penggunaan Fungsi fgets

Fungsi fgets dapat dimanfaatkan untuk mengatasi permasalahan yang diperoleh dari penggunaan fungsi scanf yang telah di uraikan di atas. Untuk penulisan fungsi ini dapat dilihat di bawah ini.
fgets(nama_variabel_array, ukuran_data, stream);
Berikut penjelasan dari sintaks fungsi fgets
  1. nama_variabel. Merupakan nama dari variabel array bertipe char yang telah di deklarasikan sebelumnya.
  2. ukuran_data. Merupakan ukuran dari banyaknya data yang dapat ditampung oleh variabel array. Dalam hal ini, ukuran yang diberikan ialah ukuran aktual dari variabel, bukan ukuran n-1 seperti yang dilakukan pada fungsi scanf pada contoh di atas.
  3. stream. Merupakan perangkat yang akan dijadikan sebagai acuan sumber data. Sumber data dapat berupa File, dan keyboard atau biasa disebut dengan stdin.
Agar tidak berlama-lama dalam penjelasan, lebih baik kita liha contoh implementasi dari penggunaan fungsi fgets ini.
Ketika kita menjalankan kode program tersebut di atas, maka kita akan memperoleh hasil yang sedikit membuat hati kita jengkel. Fungsi fgets akan mengakhiri proses membaca data ketika kita menekan tombol "Enter", namun hal inilah yang menyebabkan kejengkelan itu datang. Kejengkelan itu bisa dilihat pada kode program di atas, pada bagian yang telah saya tandai sebagai komentar. Menjengkelkan bukan? hehehe...


Oke, mari perbaiki kesalahan kode program di atas. Agar program dapat menampilkan hasil yang sesuai dengan yang diinginkan, kita harus mengganti karakter '\n' (Enter) dengan terminator '\0' agar data yang ditampilkan sesuai dengan yang seharusnya.

Penutup

Demikianlah untuk postingan kali ini mengenai memahami penggunaan fungsi fgets dalam menginput data. Jika terdapat kekurangan dan tutur kata yang kurang baik, mohon dimaafkan dan jika tidak keberatan mohon menuliskan satu dua kata mengenai postingan ini, baik kritik atau saran agar kedepannya dapat membantu penulis dalam meningkatkan mutu postingan dan pembahasan tentunya. Terima kasih. :)

3 comments:

  1. terimakasih penjelasannya, boleh nanya ? misal ingin mengambil sumber data dari file (misal file .txt), streamnya kita tulis dengan apa?

    ReplyDelete
    Replies
    1. @Razni : Untuk menjawab atas pertanyaan mbak tersebut, postingan berikut ini dapat membantu mbak menyelesaikan permasalahan yang mbak hadapi.
      http://kodeprogramcpp.blogspot.co.id/2015/02/operasi-io-file-bahasa-c.html
      Jika ada pertanyaannya, boleh ditanyakan lagi kok mbak.
      Semoga bermanfaat dan terima kasih atas kunjungannya ya mbak.
      Salam...

      Delete

Berikan komentar, Kritik dan saran teman-teman mengenai blog ini. Komentar, Kritik dan saran teman-teman sangat berarti untuk perkembangan Blog ini.
Salam Blogger, salam kodeprogramcpp.

Lihat Juga Berita Pilihan Ini