Rumah >pembangunan bahagian belakang >C++ >Mengapakah `getline()` Melangkau Input Selepas Membaca Integer dalam C ?

Mengapakah `getline()` Melangkau Input Selepas Membaca Integer dalam C ?

DDD
DDDasal
2024-12-22 22:28:13303semak imbas

Why Does `getline()` Skip Input After Reading an Integer in C  ?

Isu Input dengan getline()

Dalam atur cara C, anda mungkin menghadapi gelagat yang pelik apabila menggunakan getline() untuk membaca input pengguna . Khususnya, jika anda meminta integer, ikuti dengan getline(cin, str), dan kemudian integer lain, anda akan perasan bahawa "Masukkan Nombor Akaun" muncul sebelum anda dapat memasukkan "str."

Ini berlaku kerana getline() juga menangkap aksara baris baharu yang dimasukkan selepas integer pertama. Untuk mengelakkan ini, anda boleh mengarahkan cin untuk melangkau ruang kosong sebelum membaca "str." Begini caranya:

cout << "Enter number:";
cin >> number;
cout << "Enter name:";
cin.ignore(numeric_limits<streamsize>::max(), '\n');
getline(cin, str);

Di sini, cin.ignore() melangkau sebarang ruang putih, termasuk baris baharu, sebelum getline() membaca input pengguna.

Sebagai alternatif, anda boleh menggunakan cin.get () untuk membaca dan membuang aksara baris baharu secara eksplisit:

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

Pendekatan ini memastikan bahawa newline digunakan dan getline() tidak cuba membacanya.

Atas ialah kandungan terperinci Mengapakah `getline()` Melangkau Input Selepas Membaca Integer dalam C ?. 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