Lompat ke konten Lompat ke sidebar Lompat ke footer

Input Data Bahasa C Menggunakan Fgets dan Gets Setelah Scanf

Perhatikan contoh sederhana program bahasa C berikut ini. Program tersebut membaca nilai integer menggunakan scanf(), kemudian membaca sebuah string menggunakan fgets().


Sebelum memahami lebih dalam materi tentang Input Data Bahasa C Menggunakan Fgets dan Gets Setelah Scanf, terlebih dahulu pelajari materi tentang: getchar_unlocked() Bahasa C dan Fungsinya, Input Data Bahasa C menggunakan Scanf dan Fscanf, dan Input Buffer Bahasa C dan Fungsinya.

Dalam pengembangan perangkat lunak, interaksi dengan pengguna atau pemrosesan data dari berbagai sumber adalah hal yang umum. Bahasa pemrograman C menyediakan beragam cara untuk mengambil input data, dan seringkali pengembang perlu menggabungkan metode-metode ini untuk mencapai fleksibilitas dan keandalan yang diinginkan. Dalam artikel ini, akan dipelajari tentang penggunaan fungsi fgets(), gets(), dan scanf() dalam Bahasa C, serta cara menggabungkannya secara efektif.

Penggunaan fgets()

Fungsi fgets() digunakan untuk membaca satu baris teks dari sebuah file. Format umumnya adalah: char *fgets(char *str, int n, FILE *stream);

Contoh:

#include <stdio.h>


int main() {


char buffer[100];

printf(

"Masukkan sebuah kalimat: ");


fgets(buffer, 

sizeof(buffer), 

stdin);


printf(

"Kalimat yang dimasukkan: %s\n", buffer);


return 0;}

Berdasarkan contoh yang diperlihatkan sebelumnya, fgets() membaca input dari pengguna dan menyimpannya dalam buffer.

Penggunaan gets()

Fungsi gets() digunakan untuk membaca satu baris teks dari stdin. Namun, perlu dicatat bahwa gets() rentan terhadap buffer overflow dan penggunaannya tidak disarankan karena masalah keamanan. Format umumnya adalah: char *gets(char *str);

Contoh:

#include <stdio.h>


int main() {


char buffer[100];

printf(

"Masukkan sebuah kalimat: ");

gets(buffer);


printf(

"Kalimat yang dimasukkan: %s\n", buffer);


return 0;}

Meskipun gets() dapat digunakan, lebih baik menggunakan fgets() untuk menghindari masalah keamanan.

Penggunaan scanf()

Fungsi scanf() digunakan untuk membaca input dari stdin menggunakan format tertentu. Format umumnya adalah: int scanf(const char *format, ...);

Contoh:

#include <stdio.h>


int main() {


int num;

printf(

"Masukkan sebuah angka: ");

scanf("%d", &num);


printf(

"Angka yang dimasukkan: %d\n", num);


return 0;}


Menggabungkan Metode-metode Input

Pengembang seringkali menggabungkan berbagai metode input untuk mencapai fleksibilitas yang diinginkan. Misalnya, pengembang dapat menggunakan fgets() untuk membaca baris teks utuh dan kemudian menggunakan sscanf() untuk mem-parsing data dari string tersebut, atau menggunakan scanf() untuk membaca input sederhana seperti integer atau float, diikuti oleh fgets() untuk membersihkan newline character dari stdin.

Contoh:

#include <stdio.h>


int main() {

int num;

char buffer[100];

    

printf("Masukkan sebuah angka: ");

scanf("%d", &num);


// membersihkan newline

// character dari stdin

getchar(); 

    

printf("Masukkan sebuah kalimat: ");


fgets(buffer, 

sizeof(buffer), stdin);

    

printf(

"Angka yang dimasukkan: %d\n", num);


printf(

"Kalimat yang dimasukkan: %s\n", buffer);

    

return 0;}

Berdasarkan contoh yang diperlihatkan sebelumnya, getchar() digunakan untuk membersihkan newline character setelah scanf() sebelum menggunakan fgets().

Contoh:

// Program bahasa C untuk

// mendemonstrasikan

// permasalahan ketika fgets()

// atau gets() digunakan

// setelah scanf() pada 

// bahasa C

#include<stdio.h>

 

int main()

{

int x;

char str[100];

scanf("%d", &x);

fgets(str, 100, stdin);

printf("x = %d, str = %s", x, str);

return 0;

}

Input:
Permasalahan yang terjadi pada kode program sebelumnya adalah scanf() menbaca nilai integer dan melepaskan sebuah karakter baris baru pada buffer. Sehingga fgets() hanya membaca baris baru dan string "test" diabaikan oleh program.

Contoh: permasalahan yang sama juga muncul ketika scanf() digunakan dalam sebuah looping.

// Contoh program dalam

// bahasa C yang digunakan

// untuk mendemonstrasikan

// permasalahan ketika scanf()

// digunakan dalam sebuah

// looping

#include<stdio.h>

 

int main()

{

char c;

printf("......Tekan 'q' untuk"

" keluar......\n");

 

do

{

printf("Masukkan karakter\n");

scanf("%c", &c);

printf("%c\n", c);

}

while (c != 'q');

 

return 0;

}

Input:
a
b
q

Output:
......Tekan 'q' untuk keluar......
Masukkan karakter
a
Masukkan karakter

Masukkan karakter
b
Masukkan karakter

Masukkan karakter
q

Dapat disadari bahwa program mencetak hasil dengan ekstra karakter enter diikuti satu ekstra baris baru. Hal ini terjadi karena setiap scanf() meninggalkan sebuah karakter baris baru pada buffer yang kemudian terbaca olen scanf selanjutnya.

Solusi permasalahan:
  • Dapat dibuat dengan cara menjadikan scanf() membaca baris baru menggunakan ekstra "\n", yaitu scanf("%d\n,&x"). Faktanya scanf("%d",&x) juga dapat bekerja pada program (catatan: dengan spasi ekstra).
  • Dapat ditambahkan getchar() setelah scanf() untuk membaca ekstra baris baru.

Keuntungan-keuntungan dari menggabungkan berbagai metode input data dalam Bahasa C:
  • Fleksibilitas Input: Dengan menggabungkan berbagai metode input seperti fgets(), gets(), dan scanf(), pengembang memiliki fleksibilitas untuk menangani berbagai jenis input. Misalnya, fgets() cocok untuk membaca baris teks utuh, sementara scanf() lebih baik untuk membaca input numerik.
  • Peningkatan Keamanan: Dengan menggunakan kombinasi metode input yang tepat, pengembang dapat meningkatkan keamanan program. Menggunakan fgets() daripada gets() dapat menghindari risiko buffer overflow, sementara scanf() dengan format yang sesuai dapat membantu memvalidasi input.
  • Menangani Karakter Newline: Salah satu keuntungan penggunaan fgets() adalah kemampuannya untuk membaca baris teks utuh, termasuk karakter newline (\n). Ini berguna untuk membersihkan stdin setelah menggunakan scanf(), yang sering meninggalkan newline character.
  • Memisahkan Input: Dengan menggunakan berbagai metode input, pengembang dapat memisahkan input menjadi bagian-bagian yang lebih mudah dikelola. Misalnya, menggunakan scanf() untuk membaca nilai numerik dan fgets() untuk membaca teks memungkinkan pemrosesan dan validasi yang lebih terstruktur.
  • Penanganan Kesalahan yang Lebih Baik: Dengan menggabungkan metode input, pengembang dapat memiliki lebih banyak kontrol atas penanganan kesalahan. Misalnya, jika scanf() gagal membaca input, pengembang dapat menggunakan fgets() untuk membersihkan stdin dan menampilkan pesan kesalahan yang sesuai.
  • Memudahkan Debugging: Dengan memisahkan input menjadi langkah-langkah yang lebih terdefinisi, debugging program dapat menjadi lebih mudah. Pengembang dapat memeriksa setiap langkah input secara terpisah dan dengan demikian mengidentifikasi masalah dengan lebih cepat.
  • Menangani Kasus Khusus: Kombinasi metode input dapat digunakan untuk menangani kasus khusus atau skenario yang kompleks dengan lebih baik. Misalnya, menggunakan fgets() untuk membaca baris teks kemudian menggunakan sscanf() untuk mem-parsing data dari string tersebut dapat berguna dalam situasi di mana format input bervariasi.

Dengan memahami keuntungan-keuntungan ini, pengembang dapat memilih dan menggabungkan metode input yang sesuai dengan kebutuhan spesifik aplikasi. Ini membantu meningkatkan fleksibilitas, keamanan, dan keandalan program dalam mengambil dan memproses data dari pengguna atau sumber eksternal lainnya.

Meskipun menggabungkan berbagai metode input dalam Bahasa C memiliki beberapa keuntungan, ada juga beberapa kekurangan yang perlu diperhatikan:
  • Kompleksitas Kode: Penggunaan beberapa metode input dapat meningkatkan kompleksitas kode, terutama dalam hal penanganan kesalahan dan pemrosesan input yang kompleks. Hal ini dapat membuat kode menjadi sulit dipahami, di-maintain, dan di-debug.
  • Potensi Kesalahan Pengguna: Dengan banyaknya metode input yang digunakan, ada potensi bagi pengguna untuk salah menggunakan input, seperti memberikan format yang tidak sesuai atau tidak diharapkan. Ini dapat menyebabkan kesalahan yang sulit untuk dideteksi dan diperbaiki.
  • Potensi Keamanan: Menggunakan beberapa metode input juga meningkatkan risiko keamanan, terutama jika tidak dikelola dengan baik. Misalnya, penggunaan gets() dapat menyebabkan buffer overflow, sementara scanf() rentan terhadap serangan format string.
  • Kesulitan Pemeliharaan: Dengan menggunakan berbagai metode input, pemeliharaan kode menjadi lebih sulit karena pengembang harus memastikan bahwa setiap metode berfungsi dengan benar dan tidak bertentangan satu sama lain. Hal ini dapat memerlukan upaya tambahan dalam pengujian dan debugging.
  • Portabilitas Kode: Beberapa metode input mungkin tidak sepenuhnya portabel di semua sistem atau platform. Misalnya, gets() tidak disarankan karena rentan terhadap serangan keamanan, dan beberapa kompiler mungkin bahkan menghapusnya dari implementasinya.
  • Overhead Kinerja: Penggunaan beberapa metode input juga dapat meningkatkan overhead kinerja dalam beberapa kasus. Misalnya, menggabungkan scanf() dan fgets() untuk membersihkan stdin dari newline character setelah scanf() dapat menambah overhead yang tidak perlu.
  • Keterbatasan Pengolahan Input: Terlalu banyak metode input dapat membingungkan pengguna dan membatasi kemampuan aplikasi dalam memproses input secara efisien. Hal ini dapat mengurangi pengalaman pengguna dan menyulitkan dalam merancang antarmuka pengguna yang baik.

Dengan memperhatikan kekurangan-kekurangan ini, pengembang dapat memutuskan dengan bijaksana tentang kapan dan bagaimana menggunakan berbagai metode input dalam aplikasi. Penting untuk menyeimbangkan keuntungan dengan kerugian serta mempertimbangkan faktor keamanan, kinerja, dan pemeliharaan dalam pengambilan keputusan.

Artikel ini didedikasikan kepada: Fadhil Subandrio, Firda Athaya Nadhirah, Hasdian Kharisma Safitri, Herry Muhammad Sholeh, dan Heru Mukti Setyawan.

5 komentar untuk "Input Data Bahasa C Menggunakan Fgets dan Gets Setelah Scanf"

  1. hmm perpertinya materi kali ini agak sulit untuk dipelajari dari materi sebelumnya.

    BalasHapus
  2. Apa yang dimaksud dengan scanf, trus gunanya apa?

    BalasHapus
    Balasan
    1. Dalam bahasa pemrograman c, fungsi scanf() adalah salah satu fungsi yang umum digunakan untuk mengambil nilai inputan dari pengguna atau user yang menjalankan program tersebut. Fungsi scanf() membaca nilai input yang telah diformat dari input standar seperti keyboard atau input lainnya yang kemudian diteruskan ke komputer.

      Hapus
    2. Fungsi dari penggunaan scanf dalam bahasa C adalah untuk mengidentifikasi karakter atau masukkan apapun dari user atau pengembang. Fungsi scanf merupakan fungsi inbuilt dalam setiap paket C yang sudah dideklarasikan pada file library dalam bahasa C.

      Hapus
  3. hmm berarti penggunaan dari fungsi scanf pada bahasa C, sifatnya tidak terlalu sesederhana seperti yang dijelaskan pada panduan dasar.

    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 -