Rumah > pembangunan bahagian belakang > C++ > Mengapakah getline() Berkelakuan Tidak Dijangka dalam Gelung Selepas Menggunakan `>>`?

Mengapakah getline() Berkelakuan Tidak Dijangka dalam Gelung Selepas Menggunakan `>>`?

Barbara Streisand
Lepaskan: 2024-11-25 16:51:12
asal
376 orang telah melayarinya

Why Does getline() Behave Unexpectedly in a Loop After Using `>>`? 
>`? " />

getline() dan Input Console dalam C

Dalam C , fungsi getline() digunakan untuk mengekstrak baris teks daripada strim, biasanya konsol, bagaimanapun, apabila digunakan beberapa kali dalam satu gelung, ia mungkin berkelakuan tanpa diduga.

Masalah:
Apabila cuba mengumpul input pengguna menggunakan getline() untuk rentetan dan >> untuk integer dan beregu, pengguna tidak dapat memasukkan rentetan pertama Sebaliknya, kursor konsol melompat ke gesaan input seterusnya selepas getline() kedua panggilan.

Penjelasan:
Isu ini berpunca daripada pencampuran operator getline() dan >> aksara bukan ruang putih Walau bagaimanapun, ia meninggalkan aksara baris baharu (n) dalam strim input.

Apabila getline() dipanggil selepas >>, ia membaca aksara baris baharu sebagai rentetan kosong, mengakibatkan tingkah laku yang tidak diingini.

Penyelesaian:

  1. Gunakan Operator >> Secara konsisten: Jika semua input boleh diproses menggunakan >>, berpegang pada kaedah itu.
  2. Gunakan getline() Secara konsisten: Jika input melibatkan rentetan atau campuran jenis, gunakan getline() secara eksklusif dan huraikan nombor daripada rentetan yang diambil. Ini boleh dilakukan menggunakan aliran rentetan atau pustaka seperti Boost.
string line;
getline(cin, line);
int value = stoi(line); // Parse the number from the string
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapakah getline() Berkelakuan Tidak Dijangka dalam Gelung Selepas Menggunakan `>>`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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