Membaca Input dengan Selamat menggunakan getline
Gunakan std::getline untuk input baris dan sahkan input pengguna sebelum menggunakannya.
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.
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
- Menggunakan std::cin dan std::cout dengan Betul
- Memformat Output dengan iomanip
- Membaca Input dengan Selamat menggunakan getline
- Bekerja dengan std::cerr dan std::clog