C++ Academy · Pelajaran

Membaca Input dengan Selamat menggunakan getline

Gunakan std::getline untuk input baris dan sahkan input pengguna sebelum menggunakannya.

Pelajaran 3 daripada 413 langkah

Membaca Input dengan Selamat menggunakan getline ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.

Mengapa Masukan Selamat Penting

Masukan pengguna ialah punca ranap yang paling biasa. Jenis yang salah, baris kosong atau aksara yang tidak dijangka semuanya boleh menyebabkan program naif gagal. Pembacaan defensif amat penting.

Asas std::getline

std::getline(stream, line) membaca aksara sehingga baris baharu yang seterusnya. Baris baharu itu digunakan tetapi tidak disimpan.

std::string line;
std::getline(std::cin, line);

Pembatas Tersuai

Hantar argumen ketiga untuk berhenti pada sebarang aksara — bukan baris baharu sahaja.

std::string field;
std::getline(std::cin, field, ',');

Mengesahkan Masukan Berangka

Baca seluruh baris terlebih dahulu, kemudian huraikannya. Ini mengelakkan keadaan kegagalan cin apabila masukan tidak mengikut format.

std::string line;
int n;
if (std::getline(std::cin, line)) {
    try {
        n = std::stoi(line);
    } catch (...) {
        std::cout << "Invalid number\n";
    }
}

Mengulangi sehingga Sah

Gabungkan getline dan try/catch untuk terus meminta masukan sehingga pengguna memberikan masukan yang sah.

int age;
while (true) {
    std::cout << "Age: ";
    std::string line;
    std::getline(std::cin, line);
    try {
        age = std::stoi(line);
        if (age >= 0 && age < 150) break;
    } catch (...) {}
    std::cout << "Try again.\n";
}

Mengesan EOF dalam getline

getline menetapkan strim kepada keadaan gagal apabila mencapai EOF. Semak strim selepas panggilan itu.

std::string line;
while (std::getline(std::cin, line)) {
    process(line);
}

Memangkas Ruang Kosong

Pengguna sering menambah ruang yang tidak diperlukan. Pangkas kedua-dua hujung selepas membaca.

void trim(std::string& s) {
    size_t start = s.find_first_not_of(" \t\r\n");
    size_t end   = s.find_last_not_of(" \t\r\n");
    s = (start == std::string::npos) ? "" : s.substr(start, end - start + 1);
}

Mengosongkan Strim

Jika anda mencampurkan >> dan getline, kosongkan aksara yang tertinggal terlebih dahulu.

std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

Membaca Berbilang Nilai bagi Setiap Baris

Baca seluruh baris, kemudian masukkannya ke dalam stringstream dan ekstrak nilainya.

std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);
int a, b, c;
iss >> a >> b >> c;

Pertahanan Panjang Maksimum

Tolak masukan yang terlalu panjang lebih awal untuk mengelakkan penggunaan sumber yang tidak disengajakan secara berlebihan.

std::string line;
if (std::getline(std::cin, line) && line.size() > 1024) {
    std::cout << "Input too long.\n";
    return 1;
}

Membaca Kata Laluan atau Masukan Tersembunyi

Pustaka standard tidak menyembunyikan masukan yang dipaparkan semula. Gunakan API platform seperti termios pada Unix atau SetConsoleMode pada Windows untuk meminta kata laluan.

Semakan Pantas

Mengapakah lebih selamat untuk membaca dengan getline kemudian menghuraikannya, berbanding menggunakan std::cin >> n?

Ringkasan

Baca masukan pengguna dengan std::getline, sahkan atau huraikannya secara berasingan, kemudian pangkas ruang kosong. Balut penghuraian dalam try/catch dan ulangi sehingga mendapat nilai yang sah. Kosongkan strim apabila mencampurkan pengekstrakan dengan pembacaan baris.

Percuma untuk bermula

Pelajari C++ dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Membaca Input dengan Selamat menggunakan getline” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Membaca Input dengan Selamat menggunakan getline”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Membaca Input dengan Selamat menggunakan getline”?

Gunakan std::getline untuk input baris dan sahkan input pengguna sebelum menggunakannya. Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Membaca Input dengan Selamat menggunakan getline” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Menggunakan std::cin dan std::cout dengan Betul
  2. Memformat Output dengan iomanip
  3. Membaca Input dengan Selamat menggunakan getline
  4. Bekerja dengan std::cerr dan std::clog
← Kembali ke C++ Academy