C++ Cin String Whitespace

3 min read Jul 01, 2024
C++ Cin String Whitespace

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:

  1. 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
    
  2. 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 setelah cin >> nama; dijalankan. Ini memungkinkan getline() 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().