Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa `getline()` Tidak Berfungsi Selepas Menggunakan Operator Pengekstrakan `cin`?

Mengapa `getline()` Tidak Berfungsi Selepas Menggunakan Operator Pengekstrakan `cin`?

DDD
DDDasal
2024-11-11 15:51:02148semak imbas

Why Doesn't `getline()` Work After Using `cin`'s Extraction Operator?

Memahami Gelagat getline()

Fungsi getline() dalam C digunakan untuk membaca aksara daripada input standard sehingga aksara baris baharu dihadapi. Walau bagaimanapun, pembangun mungkin menghadapi isu yang tidak dijangka apabila menggunakan getline() selepas operator pengekstrakan cin (>>).

Penerangan Masalah

Pengguna mungkin mendapati bahawa kod mereka adalah tidak berhenti seketika untuk menerima input pengguna apabila cuba menangkap mesej yang disediakan pengguna menggunakan getline(). Punca asas berkaitan dengan kelakuan pengendali pengekstrakan cin.

Penyelesaian: Membilas Aksara Baris Baharu

Selepas menggunakan operator pengekstrakan cin untuk membaca data, ia meninggalkan baris baharu aksara (n) dalam penimbal input. Apabila getline() dipanggil serta-merta selepas itu, ia terjumpa aksara baris baharu ini dan berhenti membaca serta-merta.

Untuk menyelesaikan isu ini, seseorang mesti membuang aksara baris baharu daripada penimbal sebelum menggunakan getline(). Ini boleh dicapai dengan menggunakan cin.ignore() seperti berikut:

string messageVar;
cout << "Type your message: ";
cin.ignore();
getline(cin, messageVar);

Dengan memasukkan cin.ignore(), aksara baris baharu dibuang, membenarkan getline() membaca input pengguna seperti yang dimaksudkan. Teknik ini memastikan kedua-dua operator cin dan getline() berfungsi dengan lancar berturut-turut.

Atas ialah kandungan terperinci Mengapa `getline()` Tidak Berfungsi Selepas Menggunakan Operator Pengekstrakan `cin`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn