[ HTML ] [ Java ] [ Bahasa C ]


Minggu, Mei 02, 2021

Fungsi fflush(stdin) pada Bahasa C

fflush() umumnya digunakan hanya untuk output stream. Fungsinya adalah untuk membersihkan (atau flush) output buffer dan memindahkan data buffer menuju console (dalam kasus stdout) atau disk (pada kasus file output stream). Berikut adalah contoh dari penggunaan sintak fflush.

fflush(FILE *ostream);

Ostream merujuk pada output stream atau update yang recent yang operasinya tidak diinput, fungsi fflush membuat data apapun yang tidak tertulis untuk stream akan dikirim ke host environtment untuk ditulis sebagai file, jika tidak maka behavior tidak akan definsikan.

Apakah fflush dapat digunakan untuk input stream seperti stdin?
Sesuai dengan standard C, hal tersebut merupakan behavior yang tidak terdefinisi untuk menggunakan fflush(sdin). Namun demikian beberapa kompilator seperti Microsoft Visual Studio dapat memberikan akses untuk hal tersebut. Bagaimana cara menggunakannya pada kompilator? Ketika mengambil string input dengan spasi, buffer tidak akan dihapus untuk input selanjutnya dan menganggap input sebelumnya adalah sama. Untuk menyelesaikan permasalahan tersebut maka digunakan fflush(stdin) untuk membersihkan stream atau buffer.

// Program bahasa C untuk

// mengilustrasikan situasi

// dimana flush(stdin)

// dibutuhkan oleh kompilator

// saat ini

#include <stdio.h>

#include<stdlib.h>

 

int main()

{

char str[20];

int i;

 

for (i=0; i<2; i++)

{

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

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

// fflush(stdin);

}

 

return 0;

}

Input:
makan  
makandanmakan

Output:
makan
makan

Kode program sebelumnya hanya memberikan input tunggal dan mengembalikan nilai sama untuk input kedua. Alasan hal ini dapat terjadi karena nilai string telah disimpan pada buffer, artinya nilai stream belum dibersihkan dengan benar seperti yang diharapkan pada nilai string beserta spasi atau baris baru. Sehingga, untuk mengatasi situasi tersebut fflush(stdin) digunakan.

// Program bahasa c untuk

// mengilustrasikan

// flush(stdin).

 

// Program ini hanya bekerja

// secara efektif jika

// dikompilasi pada kompilator

// tertentu seperti Microsoft

// visual studio.

#include <stdio.h>

#include<stdlib.h>

 

int main()

{

char str[20];

int i;

 

for (i = 0; i<2; i++)

{

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

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

 

// Digunakan untuk

// membersihkan buffer dan

// melewatkan string

// selanjutnya

fflush(stdin);

}

 

return 0;

}

Input:
makan
makandanmakan

Output:
makan
makandanmakan

Apakah suatu pilihan yang baik untuk menggunakan fflush(stdin)?
Meskipun dapat menggunakan "fflush(stdin)" setelah statement "scanf()" juga dapat melakukan pembersihan pada beberapa kompilator, sangat tidak direkomendasikan untuk menggunakannya sebagai behavior tidak terdefinisi oleh bahasa standar.

5 komentar:

  1. Fungsi fflush(stdin) digunakan untuk membersihkan buffer keluaran dari stream. Fungsi tersebut mengembalikkan nilai nol, jika berhasil sebaliknya, maka akan mengembalikan EOF dan indikator error yang telah diatur.

    BalasHapus
  2. Bagaimana cara fflush bekerja pada bahasa C?

    BalasHapus
    Balasan
    1. Flush File Buffer atau fflush dalam bahasa C, merupakan fungsi yang digunakan untuk menulis data apapun yang tidak tertulis di buffer stream. JIka stream adalah petunjuk nol, maka fungsi fflush akan membersihkan semua stream dengan data yang tidak tertulis pada buffer.

      Hapus
  3. Kenapa fflush dapat bernilai salah pada bahasa C?

    BalasHapus
    Balasan
    1. stdin adalah variabel file standar yang menunjuk ke stream input yang biasanya digunakan untuk input keyboard, dimana fungsi dari fflush() dianggap sebagai "flush to buffer". Jadi, jika stream file adalah digunakan untuk input, seperti stdin, maka behavior-nya tidak dapat ditentukan, oleh karena itu tidak dapat diterima untuk menggunakan fflush() untuk menghapus inputan keyboard.

      Hapus

Respon komentar 7 x 24 jam, so please be patient :D