Rumah > pembangunan bahagian belakang > C++ > Mengapakah fungsi C `getline()` saya digantung selepas menggunakan `cin`?

Mengapakah fungsi C `getline()` saya digantung selepas menggunakan `cin`?

Barbara Streisand
Lepaskan: 2024-11-09 18:22:02
asal
557 orang telah melayarinya

Why does my C   `getline()` function hang after using `cin`?

Menggunakan getline() dalam C : Menyelesaikan Masalah Input Pengguna

Apabila menggunakan kaedah getline() untuk mendapatkan semula input pengguna, adalah penting untuk menjadi menyedari kemungkinan perangkap. Pertimbangkan kod berikut:

string messageVar;
cout << "Type your message: ";
getline(cin, messageVar);
Salin selepas log masuk

Walaupun cuba mendapatkan input pengguna, kod ini digantung selama-lamanya, tidak pernah menangkap mesej yang diingini.

Punca Isu:

Isu ini berpunca daripada fakta bahawa cin >> operator meninggalkan aksara baris baru n dalam penimbal input. Ini menjadi masalah untuk getline(), yang membaca input sehingga menemui baris baharu. Akibatnya, getline() ditamatkan secara pramatang tanpa sebarang input diberikan.

Penyelesaian:

Untuk menyelesaikan masalah ini, anda mesti membuang aksara baris baharu daripada penimbal input sebelum memanggil getline(). Ini boleh dicapai menggunakan cin.ignore():

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

Dengan menambahkan cin.ignore(), aksara baris baharu yang ditinggalkan dalam penimbal akan dibuang, membenarkan getline() berfungsi seperti yang diharapkan. Ia akan menunggu input pengguna dan menangkap mesej yang dimasukkan apabila kekunci Enter ditekan.

Atas ialah kandungan terperinci Mengapakah fungsi C `getline()` saya digantung selepas menggunakan `cin`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan