Artikel Terbaru

8 Pertimbangan yang Harus Dilakukan untuk Memilih Wallet Bitcoin

Wallet Bitcoin adalah program yang digunakan untuk mengirim dan menerima data transaksi Bitcoin, menyimpan catatan Bitcoin, dan memantau saldo Bitcoin. Sama seperti ketika seseorang memerlukan program email yang digunakan untuk mengelola data email -nya, pada Bitcoin juga terdapat program sejenis yang dapat digunakan untuk mengelola data Bitcoin tersebut, berupa wallet interface pada setiap node blockchain Bitcoin. Wallet digunakan untuk memantau alamat Bitcoin pada blockchain dan juga dapat digunakan untuk memperbarui saldo Bitcoin pada setiap transaksi.

2 Cara Membersihkan Input Buffer pada Bahasa C dan C++

Pengertian Input Buffer
Buffer adalah sebuah area penyimpanan sementara. Semua standar perangkat input dan output mengandung input dan output buffer. Pada standar bahasa C dan C++, stream juga merupakan buffer, sebagai contoh adalah pada input standar, ketika ditekan sebuah tombol pada keyboard, maka input tersebut tidak dikirim menuju program, melain mengalami penundaan (buffer) oleh sistem operasi hingga saat dimana input tersebut dialokasikan menuju program.

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.

Contoh kasus pada bahasa C

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

}

Input:
makandanmakan
a

Output:
makandanmakan

Pada contoh kasus pada C++

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

}

Input:
4
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.

Solusi Permasalahan

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;

}

Input:
makandanmakan
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;

}

Input:
4
makandanmakan

Output:
4
makandanmakan

dua, Menggunakan "cin.sync()": ketik "cin.sync()" setelah statement "cin" mengeluarkan semua yang masih tersisa pada buffer. Meskipun "cin.sync()" tidak bekerja pada semua implementasi menurut standar C++11.

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

}

Input:
4
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;

}

Input:
4
makandanmakan

Output:
4
makandanmakan

Komentar

  1. Bagaimana cara kerja buffer dalam bahasa pemrograman C?

    BalasHapus
    Balasan
    1. Bahasa 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.

      Hapus
  2. Apa yang dimaksud dengan buffer input dalam bahasa pemrograman C?

    BalasHapus
    Balasan
    1. Jika 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.

      Hapus
  3. Apa yang dimaksud dengan buffer output dalam bahasa pemrograman C?

    BalasHapus
    Balasan
    1. Output buffer adalah keluaran lokasi dalam memori atau chache dimana data disimpan hingga siap untuk dilihat oleh perangkat tampilan pada komputer.

      Hapus
  4. Saya menggunakan cin.ignore(numeric_limits::max(),'\n');
    Tetapi 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;
    }

    BalasHapus
    Balasan
    1. Hi,
      Bentuk 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.

      Hapus
  5. Kenapa permasalahan tersbut hanya muncul jika user ingin memasukkan string atau array karakter baru pada program?

    BalasHapus
    Balasan
    1. Ketika 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.

      Hapus
  6. Saya menggunakan kode program yang menggunakan cin.sync() dan hasilnya tidak berfungsi, kenapa?

    BalasHapus
    Balasan
    1. Sama 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

Posting Komentar

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung. :D

Catatan: setiap iklan yang ditayangkan pada blog ini bersumber dari google adsense. Dengan jenis iklan yang dipilih adalah, sebagai berikut.

POIN 1, Iklan yang ditampilkan hanya boleh berbahasa indonesia atau berbahasa inggris. Tidak menerima jenis iklan dalam bahasa yang lain selain yang telah disebutkan karena blog ini dibuat untuk para pengunjung dari negara atau orang yang berbahasa Indonesia.

POIN 2, Setiap gambar yang ditampilkan pada iklan sifatnya tidak mengganggu para pengunjung yang melihat blog, atau tidak boleh menampilkan gambar yang bersifat menjijikkan atau merangsang rasa mual.

POIN 3, Jenis iklan yang dipasang bukan merupakan iklan spam, atau berisi dan mengarahkan pengunjung ke alamat yang berbahaya atau bersifat penipuan.

POIN 4, Segala bentuk iklan tunduk dan patuh pada ketentuan dari pihak Adsense google dan pemilik blog.

POIN 5, Segala jenis iklan yang tidak bertentangan dengan poin 1-4 yang dijelaskan sebelumnya, maka iklan tersebut dapat ditampilkan pada blog.

POIN 6, Jika ada pihak ketika yang ingin memasang iklan pada blog ini secara langsung, maka dapat menghubungi pemilik blog melalui kontak 0882 3218 8316.



~ Ikatlah Ilmu dengan Memostingkannya ~

Hot Artikel

Perbedaan stdio.h dan stdlib.h pada Bahasa C

6 Tahap Utama dalam Melakukan Kompilasi Program Hello World Java

Perbedaan Antara int main() dan int main(void) pada Bahasa C

Enkapsulasi pada Java

3 Jenis Utama Looping pada Java