Lompat ke konten Lompat ke sidebar Lompat ke footer

Scanset Bahasa C dan Fungsinya

Dalam bahasa pemrograman C, terdapat berbagai fungsi untuk membaca input dari pengguna, salah satunya adalah scanf(). Fungsi ini sangat berguna untuk membaca nilai dari input, namun kadang-kadang memerlukan pengolahan lebih lanjut untuk memastikan bahwa input yang diberikan sesuai dengan yang diinginkan. Di sinilah konsep "scanset" atau "set pembacaan" menjadi berguna. Artikel ini akan membahas tentang scanset dalam bahasa C, bagaimana cara kerjanya, dan kegunaannya dalam membaca input yang spesifik.


Sebelum lebih lanjut mempelajari materi tentang Scanset Bahasa C dan Fungsinya, terlebih dahulu pelajari materi tentang: Keyword Register Bahasa C dan Fungsinya, Mencetak dan Menginput Nilai Bahasa C Menggunakan Printf dan Scanf, dan Getchar dan Putchar Bahasa C Beserta Fungsinya.

Pengertian

Scanset dalam bahasa C adalah mekanisme yang memungkinkan untuk menentukan set karakter yang valid yang dapat diterima sebagai input oleh fungsi scanf(). Dalam pemrograman, seringkali ingin dilakukan pembatasan input dari pengguna agar sesuai dengan kriteria tertentu, misalnya hanya menerima huruf, angka, atau karakter tertentu saja. Dengan menggunakan scanset, pengembang dapat mengimplementasikan pembatasan tersebut dengan mudah.

Sintaksis Scanset

Sintaksis umum dari scanset dalam fungsi scanf() adalah sebagai berikut: %[set karakter]

Di mana [set karakter] adalah kumpulan karakter yang valid yang ingin diterima sebagai input. Karakter-karakter ini dapat berupa huruf, angka, spasi, atau karakter khusus lainnya.

Contoh Penggunaan Scanset

Misalkan ingin membaca sebuah string dari pengguna yang hanya terdiri dari huruf kecil dan angka. Berikut adalah contoh penggunaan scanset untuk hal tersebut:

Contoh:

#include <stdio.h>


int main() {

char input[50];


printf("Masukkan string (hanya

 huruf kecil dan angka): ");


scanf("%[a-z0-9]", input);


printf("String yang

 dimasukkan: %s\n", input);


return 0;}

Dalam contoh yang diperlihatkan sebelumnya, %[a-z0-9] menunjukkan bahwa pengembang hanya ingin menerima huruf kecil (a-z) dan angka (0-9) sebagai input. Karakter-karakter lainnya tidak akan diterima.

Keluarga dari fungsi scanf mendukung penggunaan specifier scanset untuk menampilkan hasil dengan %[]. Pada scanset, dapat ditentukan karakter tunggal dari jangkauan sekumpulan karakter. Ketika scanset diproses, scanf hanya akan memproses karakter yang menjadi bagian dari scanset. Scanset dapat didefinisikan dengan cara meletakkan karakter dalam square brackets '[]'. Scanset bersifat case-sensitive.

Baca Juga:

Perhatikan contoh berikut program berikut ini. Diberikan contoh program dalam bahasa C yang akan menyimpan hanya huruf kapital untuk karakter array 'str', karakter lain yang berbeda tidak akan disimpan pada karakter array tersebut.

Contoh:

// Contoh sederhana dari

// scanset

#include <stdio.h>

 

int main(void)

{

char str[128];

 

printf("Masukkan sebuah ka"

"ta: ");

scanf("%[A-Z]s", str);

 

printf("Kata yang dimasukkan:"

" %s\n", str);

 

return 0;

}

Output:
[root@centos-6 C]# ./scan-set
Masukkan sebuah kata: Makan
Kata yang dimasukkan: M

Nilai nilai karakter pertama dari scanset adalah '^', maka specifier akan berhenti membaca program setelah kejadian pertama dari karakter. Contoh, nilai scanset berikut akan membaca semua karakter tetapi akan berhenti setelah karakter 'o' muncul.

scanf("%[^o]s", str);

Contoh: Perhatikan program berikut ini.

// Contoh lain scanset

#include <stdio.h>

 

int main(void)

{

char str[128];

 

printf("Masukkan kata: ");

scanf("%[^o]s", str);

 

printf("Kata yang dimasuk"

"kan: %s\n", str);

 

return 0;

}

Output:
[root@centos-6 C]# ./scan-set
Masukkan kata: kantor
Kata yang dimasukkan: kant
[root@centos-6 C]#

Implementasikan fungsi gets() dengan menggunakan scanset. Fungsi gets() akan membaca sebuah baris dari stdin menuju titik buffer oleh s sampai akhir baris atau EOF (End Of File) ditemukan.

Contoh:

// Implementasi dari fungsi

// gets() menggunakan scanset

#include <stdio.h>

 

int main(void)

{

char str[128];

 

printf("Masukkan kata beserta"

" spasi: ");

scanf("%[^\n]s", str);

 

printf("Kata yang dimasukkan:"

" %s\n", str);

 

return 0;

}

Output:
[root@centos-6 C]# ./gets
Masukkan kata beserta spasi: selamat datang
Kata yang dimasukkan: selamat datang
[root@centos-6 C]#

Catatan: Perlu diperhatikan bahwa, penggunaa gets() bukanlah suatu yang umum untuk digunakan. Terutama pada Linux.

Jangan menggunakan gets() karena tidak dimungkinkan untuk memberitahukan sesuatu tanpa mengetahui data pada tingkat lebih lanjut mengenai seberapa banyak karakter gets() yang dapat dibaca, dan karena gets() akan terus menerus menyimpan karakter sebelumnya hingga akhir dari buffer, dan hal ini adalah sesuatu kurang aman untuk digunakan karena hal ini dapat memengaruhi keamanan dari komputer yang digunakan. Karena itu ketimbang menggunakan gets(), jauh lebih baik jika menggunakan fgets().

Berikut adalah beberapa kelebihan penggunaan scanset dalam bahasa C:
  • Validasi Input yang Ketat: Salah satu kelebihan utama scanset adalah kemampuannya untuk melakukan validasi input yang sangat ketat. Dengan mendefinisikan set karakter yang diizinkan dalam scanset, pengembang dapat memastikan bahwa input yang diterima sesuai dengan kriteria yang diinginkan.
  • Kemudahan Implementasi: Scanset memungkinkan untuk menerapkan batasan pada input dengan cara yang relatif mudah. Dengan hanya menentukan set karakter yang diizinkan dalam format scanset, pengembang dapat langsung menerapkannya dalam fungsi scanf() tanpa perlu menulis kode validasi tambahan.
  • Efisiensi dalam Validasi: Dibandingkan dengan melakukan validasi input secara manual setelahnya, penggunaan scanset dapat menjadi lebih efisien karena proses validasi dilakukan oleh fungsi scanf() secara langsung saat membaca input.
  • Fleksibilitas dalam Penanganan Input: Scanset memungkinkan untuk menggabungkan karakter-karakter yang diizinkan dengan karakter khusus seperti spasi atau karakter pemformatan lainnya. Hal ini memberikan fleksibilitas dalam menangani berbagai jenis input.
  • Peningkatan Keamanan: Dengan membatasi input yang diterima menggunakan scanset, maka pengembang dapat mengurangi risiko serangan keamanan seperti buffer overflow atau injection attacks. Ini dapat membantu meningkatkan keamanan aplikasi yang sedang dibangun.
  • Mencegah Terjadinya Undefined Behavior: Dengan melakukan validasi input menggunakan scanset, pengembang dapat mencegah terjadinya perilaku tak terdefinisi (undefined behavior) yang mungkin terjadi jika input tidak sesuai dengan yang diharapkan.
  • Mengurangi Overhead Validasi: Dengan menggunakan scanset, validasi input dilakukan secara langsung saat membaca input menggunakan scanf(). Hal ini mengurangi kebutuhan untuk menulis kode validasi tambahan setelahnya, sehingga mengurangi overhead dalam proses pembacaan input.
  • Mempercepat Pengembangan: Scanset memungkinkan programmer untuk dengan cepat menerapkan validasi input yang ketat tanpa perlu menulis kode tambahan yang kompleks. Hal ini dapat mempercepat proses pengembangan karena penggunaan scanset dapat menjadi pendekatan yang lebih langsung dan efisien.
  • Mendukung Penanganan Karakter Khusus: Scanset memungkinkan inklusi karakter khusus seperti spasi atau karakter pemformatan dalam set karakter yang diizinkan. Ini memudahkan penanganan input yang mengandung karakter-karakter tersebut tanpa perlu melakukan manipulasi tambahan.
  • Dapat Digunakan dengan Fungsi-Fungsi Lain: Scanset tidak hanya terbatas pada fungsi scanf(), tetapi juga dapat digunakan dengan fungsi-fungsi lain seperti sscanf() dan fscanf(). Hal ini memperluas cakupan penggunaan scanset dalam membaca input dari berbagai sumber, termasuk string dan file.
  • Memungkinkan Validasi Input yang Lebih Kompleks: Selain membatasi input menjadi karakter tertentu, scanset juga memungkinkan untuk menentukan pola atau format input yang lebih kompleks menggunakan karakter wildcard seperti *, ^, atau -. Hal ini memberikan fleksibilitas dalam menentukan aturan validasi input yang lebih kompleks.

Dengan segala kelebihan ini, penggunaan scanset dalam fungsi scanf() menjadi pilihan yang kuat untuk memastikan input yang diterima sesuai dengan kebutuhan program, serta untuk meningkatkan keamanan dan keandalan aplikasi.

Kesimpulan

Dengan memahami konsep scanset dalam bahasa C, programmer dapat dengan mudah mengimplementasikan validasi input yang ketat dalam program yang dibuat, sehingga meningkatkan keandalan dan keamanan aplikasi. Meskipun scanset memiliki keterbatasan tertentu, namun tetap menjadi alat yang berguna dalam proses pembacaan input.

Referensi Tambahan:

Artikel ini didedikasikan kepada: Uswatun Chasanah, Vidia Rachmanita Fauziah, Afriant Dinta Pratama, Ahmad Mufid, dan Alvin Elian Abiyyi.

5 komentar untuk "Scanset Bahasa C dan Fungsinya"

  1. Apa yang dimasukdengan scanset pada bahasa C?

    BalasHapus
    Balasan
    1. Scanset pada dasarnya dalah sebuah perintah spesifikasi yang didukung oleh bagian dari fungsi scanf, dimana fungsi tersebut diwakili oleh %[]. Dengan menggunakan scanset, dapat ditentukan satu karakter atau sekumpulan karakter yang akan diinputkan dan bersifat Case sensitif.

      Ketika scanset diproses, maka scanf() hanya dapat memproses karakter-karakter yang disebutkan sebelumnya pada scanset.

      Hapus
  2. Saya mencoba untuk memahami fungsi dari 'scanset' pada bahasa C.

    Saya ingin memasukkan string yang terdiri dari huruf A-Z, a-z dan dapat memiliki spasi diantaranya.

    Contoh; jika nilai inputnya dalah: ABCD abcd 123

    maka hasil outputnya adalah ABCD abcd.

    saya mencoba melakukan hal tersebut dengan cara:

    scanf ("% [A-ZA-Z ^ \ n]", c),

    dimana variabel C adalah tipe array char, namun hal tersebut tidak dapaat membaca spasi yang diinputkan.

    Tolong berikan saran cara yang benar untuk menuliskan kode program tersebut.

    BalasHapus
    Balasan
    1. Anda tidak dapat memiliki inversi (^) pada bagian tengah seperti yang dituliskan tersebut, karakter tersebut harus menjadi karakter perama dalam sebuah set jika ingin digunakan.

      Anda dapat memasukkan spasi dalam sebuah set seperti kode berikut:

      scanf ("% [A-Za-z]", c);

      Insyallah dapat bekerja dengan lancar.

      Hapus
    2. oke terima kasih informasinya, akan segera dipraktikkan.

      Hapus

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 -