Bagaimana cara menghapus buffer cin di C ++?
c++
cin
io-buffering
Dana the Waras
sumber
sumber
Saya lebih suka batasan ukuran C ++ daripada versi C:
sumber
cin
dan menggunakan pernyataan pertama di atas untuk membersihkancin
buffer, maka itu terus meminta masukan sampai saya masukEOF
dengan menekanctrl+d
?Ini adalah satu-satunya hal yang berhasil bagi saya saat membaca dari konsol. Dalam setiap kasus lain itu akan terbaca tanpa batas karena kurangnya \ n, atau sesuatu akan tetap ada di buffer.
EDIT: Saya menemukan bahwa solusi sebelumnya memperburuk keadaan. Namun, yang satu ini berhasil:
sumber
Saya telah menemukan dua solusi untuk ini.
Yang pertama, dan paling sederhana, adalah menggunakan
std::getline()
misalnya:... yang akan membuang aliran input ketika sampai ke baris baru. Baca lebih lanjut tentang fungsi ini di sini .
Opsi lain yang langsung membuang aliran adalah ini ...
Semoga berhasil!
sumber
sumber
Bagaimana tentang:
sumber
Saya lebih memilih:
Ada contoh di mana cin.ignore tidak memotongnya, tapi saya tidak bisa memikirkannya saat ini. Beberapa waktu yang lalu ketika saya perlu menggunakannya (dengan Mingw).
Namun, fflush (stdin) adalah perilaku tidak terdefinisi menurut standar. fflush () hanya dimaksudkan untuk aliran keluaran. fflush (stdin) sepertinya hanya berfungsi seperti yang diharapkan di Windows (setidaknya dengan kompiler GCC dan MS) sebagai ekstensi ke standar C .
Jadi, jika Anda menggunakannya, kode Anda tidak akan portabel.
Lihat Menggunakan fflush (stdin) .
Selain itu, lihat http://ubuntuforums.org/showpost.php?s=9129c7bd6e5c8fd67eb332126b59b54c&p=452568&postcount=1 untuk alternatif.
sumber
Solusi (manual) lain yang mungkin adalah
Saya tidak bisa menggunakan fflush atau cin.flush () dengan CLion jadi ini berguna.
sumber
Cara termudah:
Ini hanya memposisikan penunjuk cin di akhir aliran stdin dan cin.clear () menghapus semua flag kesalahan seperti flag EOF.
sumber
Berikut ini seharusnya bekerja:
Pada beberapa sistem, ini tidak tersedia dan Anda dapat menggunakan:
sumber
flush
metode ini hanya untuk keluaran, dan berhubungan dengan karakter yang sudah tertulis.basic_istream<char>' has no member named 'flush'
dan kemudian gunakan fungsi
sumber
cin.get()
tampaknya memerah secara otomatis cukup aneh (meskipun mungkin tidak disukai, karena ini membingungkan dan mungkin temperamental).sumber
Itu berhasil untuk saya. Saya telah menggunakan for loop dengan getline ().
sumber