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;
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;
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!