Input Buffer Bahasa C dan Fungsinya
Dampak Terhadap Program
Dalam beberapa kesempatan mungkin dibutuhkan pembersihan buffer yang tidak diperlukan untuk mendapatkan input selanjutnya dalam wadah yang diperlukan dan tidak dalam variabel sebelumnya pada buffer. Contohnya, pada kondisi dari C setelah bertemu dengan "scanf()" dan diperlukan input karakter array dari karakter, dan pada kondisi pada C++ setelah bertemu dengan statement "cin" dan dibutuhkan input karakter array atau sebuah string. Pada kondisi tersebut maka dibutuhkan pembersihan input buffer atau input lain yang dibutuhkan oleh buffer dari variabel sebelumnya, tidak pada container yang dibutuhkan. Ketika menekan tombol "enter" pada output screen setelah input pertama maka program akan melewatkan input untuk wadah atau container selanjutnya karena variabel buffer sebelumnya adalah ruang untuk wadah yang baru.// Program bahasa C untuk
// menjelaskan mengapa tidak
// membersihkan buffer input
// yang dapat menyebabkan
// output yang tidak
// diinginkan
#include<stdio.h>
int main()
{
char str[80], ch;
// Scan inputan dari user
// Contoh, "makandanmakan"
scanf("%s", str);
// Scan karakter dari user
// contoh, 'a'
ch = getchar();
// Cetak karakter array,
// cetak "makandanmakan"
printf("%s\n", str);
// Hasil tidak ditampilkan
// karakter 'a'
printf("%c", ch);
return 0;
}
a
Output:
makandanmakan
// Program bahasa C++ untuk
// menjelaskan mengapa tidak
// membersihkan buffer input
// yang dapat menyebabkan
// output yang tidak
// diinginkan
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int a;
char ch[80];
// Masukkan input dari user
// contoh , 4
cin >> a;
// Menerima inputan dari user
// contoh, "makandanmakan"
cin.getline(ch,80);
// Cetak angka 4
cout << a << endl;
// Cetak string :
// Tidak dapat mencetak string
cout << ch << endl;
return 0;
}
makandanmakan
Output:
4
Pada dua kode program tersebut, output tidak dicetak sesuai dengan kebutuhan. Alasannya adalah buffer sedang dalam kondisi sibuk atau sedang menampung nilai perintah lain. Karakter "\n" masih tersisa pada buffer dan dibaca sebagai input selanjutnya.
Pada kasus dari bahasa C:
satu, Dengan menggunakan "while((getchar())!='\n');": ketik "while((getchar()) !='\n');" membaca karakter buffer sampai akhir dari karakter (termasuk juga new line) dan menggunakannya setelah statement "scanf()" clear dari input buffer dan memberikan ijin input berada dalam wadah yang diinginkan.
// Kode program bahasa C untuk
// menjelaskan mengapa
// menambahkan "while
// ((getchar ())! = '\ N');"
// setelah pernyataan "scanf
// ()" dapat membersihkan
// buffer input
#include<stdio.h>
int main()
{
char str[80], ch;
// Scan input dari user,
// Contoh, "makandanmakan"
scanf("%s", str);
// input standar flush
// (bersihkan input buffer)
while ((getchar()) != '\n');
// Scan karakter dari user,
// contoh, 'a'
ch = getchar();
// Mencetak karakter array,
// Mencetak "makandanmakan"
printf("%s\n", str);
// Mencetak karakter tipe
// char,
// akan mencetak karakter 'a'
printf("%c", ch);
return 0;
}
a
Output:
makandanmakan
a
dua, Dengan menggunakan "fflush(stdin)": ketik "fflush(stdin)" setelah statement "scanf()" dan bersihkan input buffer tetapi penggunaan metode ini dilarang pada bahasa c dan akan dianggap sebagai input stream tak terdefinisi sesuai Standar C++11.
Pada contoh kasus C++:
satu, gunakan "cin.ignore(numeric_limits::max(),'\n');": ketik "cin.ignore(numeric_limits::max(),'\n');" setelah statement "cin" membuat semua yang disimpan pada input stream termasuk newline.
// Kode program bahasa C++
// untuk menjelaskan mengapa
// "cin.ignore(numeric_limits
// <streamsize>::max(),'\n');"
// dapat membersihkan buffer
// input
#include<iostream>
// untuk <streamsize>
#include<ios>
// untuk numeric_limits
#include<limits>
using namespace std;
int main()
{
int a;
char str[80];
// Masukkan sebuah inputan
// dari user.
// contoh, karakter angka 4
cin >> a;
// bersihkan input buffer
cin.ignore(numeric_limits<streamsize>::max(),'\n');
// Mendapatkan hasil inputan
// dari user.
// contoh, "makandanmakan"
cin.getline(str, 80);
// Mencetak angka 4
cout << a << endl;
// Mencetak string :
// Kode berikut akan mencetak
// nilai string secara
// langsung
cout << str << endl;
return 0;
}
makandanmakan
Output:
4
makandanmakan
// Code program C++
// menjelaskan bagaimana "
// cin.sync();" dapat
// membersihkan input buffer
#include<iostream>
#include<ios>
#include<limits>
using namespace std;
int main()
{
int a;
char str[80];
// Masukkan input dari user
// contoh, angka 4
cin >> a;
// Bersihkan input buffer
cin.sync();
// Mendapatkan inputan dari
// user.
// contoh, "makandanmakan"
cin.getline(str, 80);
// Cetak angka 4
cout << a << endl;
// Cetak string:
// Kode program ini akan
// mencetak nilai string
// secara langsung
cout << str << endl;
return 0;
}
makandanmakan
Output:
4
tiga, Menggunakan "cin>>ws": ketik "cin>>ws" setelah statement "cin" untuk memberitahu kompilator untuk mengabaikan buffer dan juga untuk mengeluarkan semua ruang spasi sebelum konten sebenarnya dari string atau karakter array.
// Kode program C++ untuk
// menjelaskan bagaimana "cin
// >> ws" membersihkan input
// buffer bersama dengan spasi
// kosong pada bagian awal
// dari string
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int a;
string s;
// Masukkan inputan dari user
// contoh, angka 4
cin >> a;
// Membersihkan input buffer
// dan spasi kosong pada
// bagian awal dari string
cin >> ws;
// Mendapatkan inputan dari
// user.
// contoh, "makandanmakan"
getline(cin, s);
// Mencetak angka '4' dan
// "makandanmakan" :
// akan mengeksekusi print 'a'
// dan 's'
cout << a << endl;
cout << s << endl;
return 0;
}
makandanmakan
Output:
4
makandanmakan
- Menunggu Input dari Pengguna: Ketika program meminta input dari pengguna, input buffer menyimpan data yang dimasukkan oleh pengguna sampai program membacanya.
- Mencegah Kehilangan Data: Input buffer memastikan bahwa data yang dimasukkan tidak hilang atau terputus saat program sedang memprosesnya. Tanpa input buffer, program mungkin kehilangan data jika ia tidak siap untuk membacanya saat data tersebut diberikan.
- Memungkinkan Pemrosesan yang Fleksibel: Dengan menggunakan input buffer, program dapat membaca dan memproses data pada kecepatan yang berbeda. Ini memungkinkan interaksi yang lebih fleksibel antara program dan pengguna, serta memungkinkan program untuk mengatur dan memanipulasi data sebelumnya sebelum memprosesnya lebih lanjut.
- Menghindari Konsumsi CPU yang Tinggi: Dengan menggunakan input buffer, program dapat menunggu input tanpa harus terus-menerus memeriksa sumber input. Ini mengurangi beban CPU karena program tidak perlu terus-menerus aktif untuk menunggu input baru.
- Memungkinkan Validasi Data: Sebelum memproses data dari input buffer, program dapat melakukan validasi untuk memastikan bahwa data yang dimasukkan sesuai dengan yang diharapkan. Ini membantu mengurangi risiko kesalahan dalam program dan meningkatkan keamanan.
12 komentar untuk "Input Buffer Bahasa C dan Fungsinya"
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 -
Bagaimana cara kerja buffer dalam bahasa pemrograman C?
BalasHapusBahasa C menggunakan buffer untuk output dan input variabel. Buffer menyimpan variabel yang seharusnya diambil atau dikirim dari suatu program pada bahasa C. Dalam penggunaannya, buffer yang digunakan harus dibersihkan terlebih dahulu sebelum menerima inputan berikutnya dari suatu program.
HapusApa yang dimaksud dengan buffer input dalam bahasa pemrograman C?
BalasHapusJika mengacu pada penggunaan memori komputer, input buffer adalah lokasi yang menyimpan semua informasi yang masuk sebelum diteruskan ke CPU komputer untuk diproses. Input buffer juga dapat digunakan untuk mendeskripsikan buffer perangkat keras atau perangkat lunak lain yang digunakan untuk menyimpan informasi sebelum diproses komputer.
HapusApa yang dimaksud dengan buffer output dalam bahasa pemrograman C?
BalasHapusOutput buffer adalah keluaran lokasi dalam memori atau chache dimana data disimpan hingga siap untuk dilihat oleh perangkat tampilan pada komputer.
HapusSaya menggunakan cin.ignore(numeric_limits::max(),'\n');
BalasHapusTetapi program malah menghasilkan error yang mengatakan umeric_limits was not declared the scope.
Ada yang bisa bantu mengoreksi ?
here's the program
#include
#include
#include
using namespace std;
int main()
{
int a;
char ch[80];
// Masukkan input dari user
// Contoh, angka 4
cin >> a;
cin.ignore(numeric_limits::max(),'\n');
cin.getline(ch,80);
cout << a << endl;
cout << ch << endl;
return 0;
}
Hi,
HapusBentuk koreksi program adalah sebagai berikut (hapus ".h")
#include
Jika sudah, maka kode program akan berjalan secara sukses pada MS Visual Studio 2019, tetapi ada kemungkinan akan gagal jika digunakan pada tipe kompilator jenis lain.
Kenapa permasalahan tersbut hanya muncul jika user ingin memasukkan string atau array karakter baru pada program?
BalasHapusKetika memasukkan sebuah nilai atau menekan tombol ENTER, maka cin akan menangkap nilai dan sebuah baris baru. Contoh, jika memasukkan angka 4, maka cin sebenarnya akan mendapatkan nilai string "4\n". Dari proses tersebut kemudian akan dilakukan ekstrak nilai ke variabel tipe numerik, yang akan membiarkan baris baru mengalami macet dari stream input. Kemudian ketika std::getline() membaca string baru, maka std::getline() akan melihat "\n" yang sudah terdapat pada stream, dan kemudian akan menafsirkannya sebagai string kosong yang telah dimasukkan! walaupun itu bukan maksud sebenarnya dari pembuatan program. Oleh karena itu, aturan praktisnya adalah melakukan penghapusan baris baru dari stream input, setelah membaca nilai dari console dengan std::cin.
HapusSaya menggunakan kode program yang menggunakan cin.sync() dan hasilnya tidak berfungsi, kenapa?
BalasHapusSama seperti readsome(), fungsi tersebut merupakan implementasi yang ditentukan apakah fungsi tersebut akan melakukan sesuatu dengan stream yang disediakan pada library. Tujuan dari fungsi tersebut adalah untuk mengambil perubahan apapun yang mungkin telah dibuat pada urutan input terkait dengan aliran buffer terakhir yang mengisi area get-nya. Untuk mencapai hal tersebut, maka sync() dapat mengosongkan area get, atau mungkin mengisi ulang, atau mungkin tidak melakukan apa-apa. Kondisi pengecualian adalah terjadi pada Visual Studio, dimana operasi ini akan membuang input yang belum diproses ketika dipanggil dengan stream standar input.
Hapus