Rumah > pembangunan bahagian belakang > C++ > Mengapakah `getline()` Melangkau Input Selepas Menggunakan `cin`?

Mengapakah `getline()` Melangkau Input Selepas Menggunakan `cin`?

Barbara Streisand
Lepaskan: 2024-12-08 19:21:10
asal
860 orang telah melayarinya

Why Does `getline()` Skip Input After Using `cin`?

Mengatasi Input Langkau dalam getline()

Apabila menggunakan fungsi getline() dalam atur cara, adalah penting untuk mengetahui perkara biasa isu: mendapatkan input seterusnya segera selepas memasukkan nombor. Tingkah laku ini boleh berlaku kerana aksara baris baharu yang ditinggalkan dalam strim input selepas memasukkan nombor.

Mari kita periksa contoh khusus:

int number;
string str;
int accountNumber;

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

Apabila dilaksanakan, kod ini berkelakuan di luar jangkaan. Selepas memasukkan nombor, ia dengan serta-merta mengeluarkan "Masukkan Nombor Akaun" tanpa membenarkan pengguna memasukkan nama menggunakan getline(cin, str).

Sebab bagi tingkah laku ini terletak pada cara getline() membaca input. Ia membaca keseluruhan baris, termasuk watak baris baharu. Apabila anda memasukkan nombor dan tekan enter, baris baharu ditinggalkan dalam aliran input. Apabila getline() dipanggil, ia membaca baris baharu ini dan kembali, tanpa menunggu sebarang input lain. Ini menyebabkan program melangkau gesaan "Masukkan nama:".

Untuk menyelesaikan isu ini, anda boleh menggunakan manipulator std::ws untuk melangkau mana-mana ruang kosong utama, termasuk aksara baris baharu, sebelum memanggil getline( ). Berikut ialah kod yang dikemas kini:

cout << "Enter number: ";
cin >> number;
cout << "Enter name: ";
cin >> std::ws;
getline(cin, str);
cout << "Enter account number: ";
cin >> accountNumber;
Salin selepas log masuk

Dengan perubahan ini, program akan menjeda dengan betul pada gesaan "Masukkan nama:" dan membenarkan pengguna memasukkan nama sebelum meneruskan.

Atas ialah kandungan terperinci Mengapakah `getline()` Melangkau Input 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