Pinned

Penggunaan fflush(stdin) Bahasa C dan Fungsinya

fflush() umumnya digunakan hanya untuk output stream. Fungsinya adalah untuk membersihkan (atau flushoutput buffer dan memindahkan data buffer menuju console (dalam kasus stdout) atau disk (pada kasus file output stream). 

2 Fakta Menarik tentang Fungsi fflush(stdin) pada Bahasa C
Ilustrasi Fungsi fflush(stdin) Bahasa C

Sebelum memahami materi tentang Penggunaan fflush(stdin) Bahasa C dan Fungsinya, terlebih dahulu pelajari materi tentang: Printf, Sprintf, dan Fprintf Bahasa C Beserta Fungsinya [klik]Getc, Getchar, Getch, dan Getche Bahasa C Beserta Perbedaannya [klik], dan Specifier %d dan %i Bahasa C dan Fungsinya [klik].

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.

Baca Juga:

Apakah fflush dapat digunakan untuk input stream seperti stdin?
Sesuai dengan standar 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.

Contoh:

// 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.

Contoh:

// 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.

9 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
  4. Biasanya dalam dua programming terdapat dua tipe programmer dalam memahami program. Pertama mereka yang berpikir bahwa behavior tidak terdefinisi bukanlah suatu masalah besar, dan kedua adalah mereka yang menghabiskan waktu berhari-hari untuk mendebug kode program orang lain dan akhirnya baru menyadari bawah satu baris behavior tidak terdefinisi tersebut ternyata berpengaruh pada konfigurasi atau platform tertentu dari kompilator tertentu. :D

    Jika anda adalah orang yang mengabiskan waktu lebih dari 30 menit untuk memahami materi ini berarti anda termasuk katergori kedua,

    BalasHapus
  5. Program ini dapat bekerja dengan baik tanpa menggunakan fflush(). jika dikompilasi pada https://www.onlinegdb.com/online_c_compiler

    BalasHapus
  6. Program kedua yang menggunakan fflush(stdin), juga memberikan hasil output yang sama dengan program pertama yang tidak menggunakan fflush(stdin).

    BalasHapus
    Balasan
    1. Iya, kedua program dapat bekerja dengan baik pada kompilator berbasis offline.

      Hapus

Hubungi admin melalui Wa : +62-896-2514-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 come from small things -