C++ cin
dan String dengan Whitespace
cin
adalah objek dalam C++ yang digunakan untuk mengambil input dari pengguna. Ketika bekerja dengan string, cin
memiliki keterbatasan dalam menangani whitespace (spasi, tab, baris baru).
Masalah dengan cin
dan Whitespace
cin
berhenti membaca input saat menemukan whitespace. Ini berarti jika pengguna memasukkan string yang mengandung spasi, cin
hanya akan membaca bagian sebelum spasi pertama.
Contoh:
#include
#include
using namespace std;
int main() {
string nama;
cout << "Masukkan nama lengkap Anda: ";
cin >> nama;
cout << "Nama Anda: " << nama << endl;
return 0;
}
Jika pengguna memasukkan "John Doe", output program akan menjadi:
Nama Anda: John
Hanya "John" yang dibaca karena cin
berhenti membaca setelah spasi pertama.
Solusi:
Ada beberapa cara untuk menangani whitespace saat menggunakan cin
dengan string:
-
Menggunakan
getline()
:Fungsi
getline()
membaca seluruh baris input, termasuk whitespace.#include
#include using namespace std; int main() { string nama; cout << "Masukkan nama lengkap Anda: "; getline(cin, nama); cout << "Nama Anda: " << nama << endl; return 0; } Dengan
getline()
, output program akan menjadi:Nama Anda: John Doe
-
Mengabaikan Whitespace dengan
cin.ignore()
:Fungsi
cin.ignore()
dapat digunakan untuk mengabaikan karakter tertentu dari input buffer.#include
#include using namespace std; int main() { string nama; string kata; cout << "Masukkan nama lengkap Anda: "; cin >> nama; // Mengabaikan sisa input di buffer (termasuk whitespace) cin.ignore(numeric_limits ::max(), '\n'); cout << "Masukkan kata: "; getline(cin, kata); cout << "Nama Anda: " << nama << endl; cout << "Kata: " << kata << endl; return 0; } Dalam contoh ini,
cin.ignore()
digunakan untuk mengabaikan karakter yang tersisa di buffer setelahcin >> nama;
dijalankan. Ini memungkinkangetline()
untuk membaca input yang benar selanjutnya.
Kesimpulan:
cin
memiliki keterbatasan dalam menangani whitespace dalam string. Untuk membaca input yang mengandung whitespace, gunakan getline()
atau gabungkan cin
dengan cin.ignore()
.