Lompat ke konten Lompat ke sidebar Lompat ke footer

Input Data Bahasa C menggunakan Scanf dan Fscanf

Kebanyakan para pengembang telah mengetahui fungsi utama dari scanf. Namun demikian, berikut akan dipaparkan beberapa info tambahan yang perlu diketahui berkaitan dengan fungsi tersebut pada bahasa C.


Sebelum memahami lebih dalam materi tentang Input Data Bahasa C menggunakan Scanf dan Fscanf, terlebih dahulu pelajari materi tentang: Input Buffer Bahasa C dan Fungsinya, Penggunaan fflush(stdin) Bahasa C dan Fungsinya, dan Specifier %d dan %i Bahasa C dan Fungsinya.

Bahasa pemrograman C memiliki beragam cara untuk menerima masukan data dari pengguna atau dari file. Dua di antaranya adalah menggunakan fungsi scanf() dan fscanf(). Dalam artikel ini, pengembang akan memahami kedua cara ini untuk mengambil input data dalam bahasa C.

Penggunaan scanf()

Fungsi scanf() digunakan untuk membaca masukan dari keyboard atau standar input. Format umumnya adalah: scanf("format_specifier", &variable);

Contoh:

#include <stdio.h>


int main() {

int num;

printf(

"Masukkan sebuah angka: ");

scanf("%d", &num);


printf(

"Angka yang dimasukkan: %d\n"

num);


return 0;}

Berdasarkan contoh yang diperlihatkan sebelumnya, %d adalah format specifier yang menunjukkan bahwa pengembang ingin membaca input sebagai integer.

Keuntungan:
  • Mudah digunakan.
  • Bisa membaca input dari keyboard.
Kerugian:
  • Rentan terhadap kesalahan pengguna.

Penggunaan fscanf()

fscanf() berfungsi serupa dengan scanf(), tetapi membaca dari sebuah file. Format umumnya adalah: fscanf(file_pointer, "format_specifier", &variable);

Contoh:

#include <stdio.h>


int main() {

FILE *fp;

int num;


fp = fopen("data.txt", "r");


if (fp == NULL

{printf(

"File tidak dapat dibuka.\n");


return 1;}


fscanf(fp, "%d", &num);

printf(

"Angka dari file: %d\n", num);


fclose(fp);


return 0;}

Berdasarkan contoh yang diperlihatkan sebelumnya, dilakukan proses baca angka dari file bernama "data.txt".

Keuntungan:
  • Cocok untuk membaca dari file.
  • Memisahkan input dari kode sumber.
Kerugian:
  • Memerlukan penanganan file yang tepat.
  • Rentan terhadap kesalahan dalam penanganan file.

Bagaimana cara membuat read only menjadi bagian dari input yang dibutuhkan pada sebuah program?

contoh, pertimbangkan beberapa input stream yang mengandung hanya karakter dan diikuti olen integer atau float. Dan yang dibutuhkan hanya scan only untuk integer atau float seperti contoh berikut ini:

Input: “this is the value 100”,
Outputvalue read is 100

Input : “this is the value 21.2”,
Output : value read is 21.2

Contoh:

// Program bahasa C untuk

// mendemonstrasikan bahwa

// user dapat mengabaikan

// beberapa string dalam

// scanf()

#include <stdio.h>

 

int main()

{

int a;

scanf("Ini adalah nilai %d", &a);

printf("Nilai inputan yang"

" dibaca : a = %d", a);

return 0;

}

 

// Input : Ini adalah nilai 

// 100

 

// Output : Nilai inputan yang

// dibaca : a = 100


Sekarang diasumsikan bahwa tidak diketahui karakter apakah yang mendahuluinya tetapi, dapat diketahui secara pasti bahwa nilai terakhir yang diketahui adalah integer. Bagaimana cara untuk melakukan scan nilai terakhir sebagai nilai integer?

Berikut solusi yang hanya dapat bekerja jika input string tidak memiliki spasi.

Contoh:

// Contoh program bahasa C

// untuk mendemonstrasikan

// penggunaan dari *s

#include<stdio.h>

 

int main()

{

int a;

scanf("%*s %d", &a);

printf("Nilai yang terbaca :"

" a=%d",a);

return 0;

}

 

// Input: "blablabla 25"

 

// Output: Nilai yang terbaca

// : 25


Penjelasan: %*s pada scanf digunakan untuk mengabaikan beberapa input yang diperlukan. Pada kondisi ini akan mengabaikan input sampai spasi selanjutnya atau baris baru. Sama seperti jika mengetik %*d, maka akan diabaikan nilai integer-nya sampai spasi selanjutnya atau baris baru.

Fakta tersebut mungkin terlihat seperti cara yang tidak terlalu berguna, namun untuk memahami kegunaannya, perhatikan fungsi fscanf() berikut ini.

fscanf(): Jika terlalu banyak menggunakan sintak seperti contoh sebelumnya, maka dapat digunakan pendekatan lain dengan menggunakan fscanf().

int fscanf(FILE *ptr, const char *format, ...)

fscanf menbaca dari sebuah file yang ditunjuk oleh FILE pointer (ptr), ketimbang membaca langsung dari input stream.

Perhatikan teks file abc.txt

NAME    AGE   CITY
abc     12    hyderbad
bef     25    delhi
cce     65    bangalore

Sekarang akan dilakukan read only city field dari teks file sebelumnya, mengacuhkan semua field yang lain.

Contoh:

// Program bahasa C untuk

// mendemonstrasikan fscanf

// dan kegunaannya pada

// program

#include<stdio.h>

 

int main()

{

 

FILE* ptr = fopen("abc.txt","r");

 

if (ptr==NULL)

{

printf("no such file.");

return 0;

}

 

// Diasumsikan bahwa file

// abc.txt memiliki beberapa

// isi konten sebagai berikut:

 

// NAME AGE CITY

// abc  12 hyderbad

// bef  25 delhi

// cce  65 bangalore

 

char* buf[100];

while (fscanf(ptr,"%*s %*s %s ",buf)==1)

printf("%s\n", buf);

 

return 0;

}

Output:
CITY
hyderbad
delhi
bangalore

Penggunaan fungsi scanf() dan fscanf() dalam bahasa C memiliki manfaat yang dapat diterapkan dalam berbagai situasi, baik dalam pengembangan perangkat lunak maupun pemrosesan data. Berikut adalah beberapa manfaat umum dari kedua fungsi tersebut:
  • Menerima Input Pengguna: Baik scanf() maupun fscanf() memungkinkan aplikasi untuk menerima input dari pengguna atau dari file. Ini memungkinkan interaksi yang dinamis antara pengguna dan program, sehingga memungkinkan aplikasi untuk menanggapi input secara real-time.
  • Fleksibilitas Format: Keduanya mendukung berbagai format input, termasuk integer, float, string, dan tipe data lainnya. Ini memungkinkan programmer untuk menangani berbagai jenis data dalam aplikasi dengan mudah.
  • Pengolahan Data dari Sumber Eksternal: fscanf() khususnya berguna ketika memproses data dari file eksternal, seperti file teks atau file log. Dengan fscanf(), program dapat membaca data dari file dan melakukan operasi pengolahan data yang diperlukan.
  • Pemisahan Input dari Kode Sumber: Dengan menggunakan fscanf(), input data dipisahkan dari kode sumber. Ini memungkinkan pengembang untuk memodifikasi atau memperbarui data tanpa harus mengubah kode program utama. Ini memisahkan perubahan data dari perubahan logika aplikasi.
  • Pembelajaran dan Pengajaran: Penggunaan scanf() dan fscanf() adalah bagian integral dari belajar bahasa pemrograman C. Memahami cara kerja dan penggunaan kedua fungsi ini membantu dalam pemahaman dasar pemrograman dan konsep input/output.
  • Kemudahan Penggunaan: Meskipun terkadang rawan kesalahan, scanf() dan fscanf() relatif mudah digunakan untuk membaca input. scanf() dan fscanf() tidak memerlukan perpustakaan eksternal atau konfigurasi tambahan, sehingga bisa digunakan dengan cepat dan mudah.
  • Mendukung Pengembangan Aplikasi Multiformat: Dengan kemampuan untuk membaca berbagai format input, baik dari pengguna maupun dari file, scanf() dan fscanf() mendukung pengembangan aplikasi yang dapat menangani berbagai jenis data. Ini berguna dalam pengembangan perangkat lunak yang perlu berinteraksi dengan banyak jenis input.

Dengan memahami dan memanfaatkan fungsi-fungsi ini, pengembang dapat membuat program yang lebih interaktif, fleksibel, dan dapat diandalkan dalam bahasa C.

Meskipun fungsi scanf() dan fscanf() memiliki beberapa manfaat yang telah disebutkan sebelumnya, ada juga beberapa kekurangan yang perlu dipertimbangkan oleh pengembang:
  • Rentan terhadap Kesalahan Pengguna: Salah satu kelemahan utama dari kedua fungsi ini adalah keduanya rentan terhadap kesalahan pengguna. Misalnya, jika pengguna memasukkan tipe data yang tidak sesuai dengan format yang diharapkan, ini dapat menyebabkan masalah pada program, seperti buffer overflow atau undefined behavior.
  • Kesulitan dalam Menangani Masukan yang Tidak Terduga: Kedua fungsi ini sulit untuk menangani masukan yang tidak terduga atau tidak valid. Program harus memvalidasi input dengan hati-hati untuk menghindari masalah yang disebabkan oleh masukan yang tidak sesuai.
  • Tidak Ada Perlindungan Otomatis terhadap Overflows: Kedua fungsi ini tidak memberikan perlindungan otomatis terhadap buffer overflows. Jika pengguna memasukkan data yang melebihi kapasitas variabel yang ditentukan, ini dapat menyebabkan masalah pada program, seperti segmentation fault.
  • Keterbatasan dalam Pengolahan File: Meskipun fscanf() berguna untuk membaca data dari file, ada keterbatasan dalam pengolahan file yang lebih kompleks. Misalnya, jika struktur data dalam file kompleks, penggunaan fscanf() mungkin tidak cukup fleksibel atau efisien.
  • Kesulitan dalam Memanipulasi Format Input: Format input dalam kedua fungsi ini terkadang sulit untuk dimanipulasi secara fleksibel. Misalnya, mengabaikan karakter newline (\n) dalam input pengguna atau mengabaikan spasi ekstra dalam file teks bisa menjadi tantangan.
  • Kinerja yang Buruk pada Pengolahan String: Penggunaan scanf() untuk membaca string dari input pengguna dapat mengakibatkan kinerja yang buruk dalam beberapa kasus, terutama jika string yang dimasukkan sangat panjang.
  • Tidak Ada Perlindungan terhadap Kegagalan Baca: Kedua fungsi ini tidak memberikan perlindungan otomatis terhadap kegagalan baca. Misalnya, jika file yang diharapkan tidak tersedia atau tidak dapat dibuka, ini dapat menyebabkan aplikasi menjadi tidak responsif atau menghasilkan kesalahan yang tidak diharapkan.
  • Keterbatasan dalam Pengujian dan Debugging: Karena kedua fungsi ini menerima input dari pengguna atau dari file eksternal, pengujian dan debugging program yang menggunakan scanf() dan fscanf() dapat menjadi lebih sulit. Pengembang harus memperhitungkan berbagai kemungkinan masukan dan memastikan bahwa program dapat menangani masukan dengan benar dalam semua skenario.

Dengan memahami kekurangan-kekurangan ini, pengembang dapat mengambil tindakan pencegahan yang sesuai dan mempertimbangkan alternatif yang lebih aman atau lebih efisien, tergantung pada kebutuhan aplikasi dan keamanan data.

Kesimpulan

scanf() dan fscanf() adalah dua cara yang umum digunakan untuk membaca masukan dalam bahasa C. Meskipun keduanya memiliki kegunaan masing-masing, pemilihan tergantung pada sumber input dan kebutuhan aplikasi. Jika pengembang ingin membaca dari keyboard, scanf() adalah pilihan yang baik, sementara untuk membaca dari file, fscanf() lebih sesuai. Penting untuk memahami perbedaan dan kelebihan masing-masing untuk membuat keputusan yang tepat saat mengembangkan program dalam bahasa C.

5 komentar untuk "Input Data Bahasa C menggunakan Scanf dan Fscanf"

  1. Dalam bahasa pemrograman C, fungsi scanf() adalah salah satu fungsi yang secara umum digunakan untuk mengambil inputan dari pengguna atau user. Fungsi scanf() membaca nilai inputan yang telah diformat dari input standar seperti keyboard.

    BalasHapus
  2. Dalam bahasa pemrograman C, scanf adalah fungsi yang digunakan untuk membaca data yang telah diformat dari stdin (yaitu, suatu stream dari input standar, yang biasanya berupa inputan keyboard) dan kemudian menuliskan hasilnya ke dalam argumen yang telah diberikan.

    BalasHapus
  3. fscanf() adalah fungsi yang digunakan untuk membaca sekumpulan karakter dari file dalam bahasa pemrograman C. Fungsi tersebut membaca sebuah kata dari file dan mengembalikan EOF di bagian akhir file.

    BalasHapus
  4. Apa yang dilakukan fungsi fscanf() dalam bahasa pemrograman C?

    BalasHapus
    Balasan
    1. Fungsi fscanf() digunakan untuk membaca nilai inputan yang diformat dari file. Fungsi tersebut bekerja seperti halnya fungsi scanf() tetapi bukannya membaca data dari input standar, melainkan fungsi tersebut membaca data dari file secara langsung.

      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 -