Untuk keperluan Input data String, Bahasa C telah menyediakan berbagai macam fungsi input.
Diantaranya adalah scanf();
gets();
dan fgets();
Dari masing-masing fungsi diatas, tentunya memiliki kelebihan dan kekurangannya masing-masing.
Mari kita simak penjelasan berikut:
1. Fungsi scanf()
Fungsi Input data string yang pertama yaitu scanf()
scanf()
merupakan fungsi yang dapat digunakan untuk menginputkan berbagai macam tipe data, salah satunya yaitu string.
Berikut merupakan syntax dari fungsi scanf()
#include <stdio.h>
int main(){ char teks[20]; printf("Masukkan sebuah teks : "); scanf("%s", teks); printf("Teks yang anda masukkan adalah %s", teks); return 0; }
Setelah program dijalankan, output yang dihasilkan adalah "Belajar"
saja.
Padahal, pada program tadi kita tuliskan "Belajar Bahasa C"
. Dari sinilah kita tahu kelemahan dari fungsi scanf()
untuk menginput data bertipe string.
Fungsi scanf ini tidak dapat menampilkan karakter/teks setelah karakter spasi. Sehingga, output yang ditampilkan hanya karakter-karakter sebelum spasi saja.
Hal ini tentunya sangatlah tidak efektif digunakan untuk menampilkan teks yang panjang dan didalamnya memuat karakter spasi.
2. Fungsi gets()
Fungsi Input data string yang kedua yaitu gets()
gets atau get string merupakan fungsi yang hanya digunakan untuk menginputkan data bertipe string saja. Berbeda halnya dengan fungsi scanf()
Didalam fungsi gets()
ini, program akan membaca seluruh karakter yang diketik melalui keyboard sampai ENTER ditekan tanpa mengecek batasan panjang array yang telah ditentukan.
Berikut merupakan syntax dari fungsi gets()
#include <stdio.h>
int main(){ char nama[10]; printf("Masukkan Nama anda : "); gets(nama); printf("Nama : %s", nama); return 0; }
Setelah kita perhatikan, output terlihat baik-baik saja dan tidak terjadi kesalahan.
. . .
Namun.. coba perhatikan program berikut
#include <stdio.h>
int main(){ char nama[10]; int umur = 19; printf("Masukkan Nama anda : "); gets(nama); printf("Nama : %s\n", nama); printf("Umur : %d", umur); return 0; }
Perhatikan program diatas, variabel umur
kita inisialisasikan dengan nilai 19
.
Tetapi setelah program kita jalankan, variabel umur
malah menampilkan nilai 0
Hal inilah yang disebut sebagai buffer overflow
buffer
tempat penyimpanan data.
overflow
kelebihan muatan
Jadi, buffer overflow ini merupakan keadaan dimana program menyimpan data diluar kapasistas yang telah ditentukan.
Pada program diatas, kita tuliskan nama[10]
artinya, secara normal variabel nama
hanya dapat menampung maksimal 10 karakter saja.
Sedangkan Input yang kita masukkan yaitu "Ambis Kode"
terhitung sebanyak 11 karakter.
Sehingga, karakter setelah 10 karakter pertama, akan menumpuki tempat dari variabel berikutnya.
Coba saja jika kita menginputkannya dengan benar..
#include <stdio.h>
int main(){ char nama[10]; int umur = 19; printf("Masukkan Nama anda : "); gets(nama); printf("Nama : %s\n", nama); printf("Umur : %d", umur); return 0; }
Maka, program akan menampilkan datanya dengan benar
3. Fungsi fgets()
Fungsi Input string yang terakhir yaitu fgets()
(format get string)
fgets ini dinilai lebih aman dari dua fungsi diatas dalam hal input data string.
Hal ini dikarenakan, apabila kita menginput data melebihi kapasitas tempat yang telah diasediakan, maka kelebihannya tadi akan dibuang.
format penulisan fungsi fgets()
yaitu:
fgets(namaVar, sizeof(namaVar), stdin); // Contoh fgets(myName, sizeof(myName), stdin);
namaVar
merupakan nama variabel yang digunakan untuk menyimpan data yang diinputkan.sizeof(namaVar)
merupakan ukuran buffer atau panjang array untuk menyimpan banyaknya karakter.stdin
merupakan standar input masukan dari keyboard.
Perhatikan program berikut..
#include <stdio.h>
int main(){ char nama[10]; printf("Masukkan Nama anda : "); fgets(nama, sizeof(nama), stdin); printf("Nama : %s", nama); return 0; }
Pada program diatas, kita mensetting variabel nama
hanya dapat menampung 10 karakter saja nama[10]
. Maka, kelebihannya tadi akan dibuang dan tidak akan ditampilkan sebagai output.
Tapi.. Dibuang kemana??
. . .
Perhatikan program berikut..
#include <stdio.h>
int main(){ char nama[10]; char alamat[10]; printf("Masukkan Nama anda : "); fgets(nama, sizeof(nama), stdin); printf("Masukkan Alamat anda : "); fgets(alamat, sizeof(alamat), stdin); printf("Nama : %s\n", nama); printf("Alamat : %s", alamat); return 0; }
Belum sampai menginputkan Alamat, program sudah menampilkan output. Dan sisa karakter yang kelebihan tadi akan dibuang ke varibel setelahnya.
Sehingga, output yang ditampilkan tidak sesuai dengan apa yang diharapkan.
Lalu, Bagaimana solusinya..??
. . .
Perhatikan program berikut..
#include <stdio.h>
int main(){ char nama[10]; char alamat[10]; printf("Masukkan Nama anda : "); fgets(nama, sizeof(nama), stdin);
fflush(stdin); // Berfungsi untuk menghapus buffer input standar
printf("Masukkan Alamat anda : "); fgets(alamat, sizeof(alamat), stdin); printf("Nama : %s\n", nama); printf("Alamat : %s", alamat); return 0; }
Diantara fungsi Input nama
dan alamat
kita sisipkan fungsi fflush(stdin)
Apa itu fungsi fflush(stdin)
???
Simak penjelasannya di Kegunaan fungsi fflush(stdin) dalam Bahasa C.
Jadi.. Pada Intinya, dalam menginputkan data bertipe string, usahakan data yang diinputkan tidak melebihi kapasitas yang telah ditentukan.
Contoh, nama[10]
maka karakter yang seharusnya kita inputkan maksimal hanya 10 karakter saja.
Hal ini bertujuan agar program tidak error dan juga menghindari kesalahan program dalam menampilkan data, yang menyebabkan output yang ditampilkan tidak sesuai dengan yang diharapan.
Post a Comment
Post a Comment