Rumah >pembangunan bahagian belakang >C++ >Mengapakah `getline()` dalam C Kadangkala Melangkau Input Pengguna, dan Bagaimana Saya Boleh Membetulkannya?

Mengapakah `getline()` dalam C Kadangkala Melangkau Input Pengguna, dan Bagaimana Saya Boleh Membetulkannya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-09 07:42:08478semak imbas

Why Does `getline()` in C   Sometimes Skip User Input, and How Can I Fix It?

getline() dalam C : Mengendalikan Penimbalan Talian

Dalam C , getline() digunakan untuk membaca input daripada aliran input standard cin sehingga watak baris baharu ditemui. Walau bagaimanapun, apabila digunakan dalam atur cara di mana input pengguna diminta, ia boleh membawa kepada gelagat yang tidak dijangka.

Pertimbangkan coretan kod berikut:

int number;
string str;
int accountNumber;

cout << "Enter number:";
cin >> number;
cout << "Enter name:";
getline(cin, str);
cout << "Enter account number:";
cin >> accountNumber;

Apabila program ini dilaksanakan, anda mungkin perasan bahawa selepas memasukkan nombor pertama, program segera meminta anda untuk nombor akaun tanpa menunggu anda memasukkan nama anda. Ini kerana getline() membaca aksara baris baharu yang tinggal daripada penimbal input.

Untuk mengelakkan isu ini, anda boleh menggunakan std::ws (ruang putih) sebelum getline() untuk melangkau semua ruang putih dan aksara baris baharu daripada aliran input. Ini memastikan getline() membaca input daripada aksara bukan ruang putih seterusnya:

cout << "Enter number:";
cin >> number;
cout << "Enter name:";
cin >> ws;
getline(cin, str);
...

Dengan memasukkan langkah ini, atur cara akan menggesa nama anda dengan betul sebelum beralih ke input seterusnya.

Atas ialah kandungan terperinci Mengapakah `getline()` dalam C Kadangkala Melangkau Input Pengguna, dan Bagaimana Saya Boleh Membetulkannya?. 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