Penggunaan fflush(stdin) Bahasa C dan Fungsinya
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.
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.
// 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;
}
makandanmakan
Output:
makan
makan
// 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;
}
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.
- Perbedaan Karakter Kontrol dan Karakter Cetak pada Bahasa C [klik]
- 2 Perbedaan Utama Rand dan Srand pada Bahasa C [klik]
- 5 Jenis Utama Operator Aritmatika Bahasa C dan C++ [klik]
- 6 Jenis Utama Operator Relasi dan 3 Jenis Operator Logika pada Bahasa C [klik]
- 6 Jenis Utama Operator Bitwise pada Bahasa C, Beserta 3 Fakta Menariknya [klik]
- 5 Fakta tentang Operator Precedence dan Asosiatifitas pada Bahasa C [klik]
- Penjelasan Singkat, Perintah Evaluasi dari Operand dalam Bahasa C [klik]
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.
BalasHapusBagaimana cara fflush bekerja pada bahasa C?
BalasHapusFlush 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.
HapusKenapa fflush dapat bernilai salah pada bahasa C?
BalasHapusstdin 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.
HapusBiasanya 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
BalasHapusJika anda adalah orang yang mengabiskan waktu lebih dari 30 menit untuk memahami materi ini berarti anda termasuk katergori kedua,
Program ini dapat bekerja dengan baik tanpa menggunakan fflush(). jika dikompilasi pada https://www.onlinegdb.com/online_c_compiler
BalasHapusProgram kedua yang menggunakan fflush(stdin), juga memberikan hasil output yang sama dengan program pertama yang tidak menggunakan fflush(stdin).
BalasHapusIya, kedua program dapat bekerja dengan baik pada kompilator berbasis offline.
Hapus