0Pricing
C++ Academy · Pelajaran

Penanganan Error dan Status

Periksa status stream

Penanganan Error dan Status adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Bit Status Aliran

Setiap aliran melacak kondisinya dengan bendera status:

  • goodbit: semuanya baik.
  • eofbit: akhir berkas telah tercapai.
  • failbit: galat logis (format buruk).
  • badbit: galat I/O serius.
#include <iostream>
#include <fstream>

int main() {
    std::ifstream in("missing_98765.txt");
    std::cout << std::boolalpha << "good: " << in.good() << '\n';
    return 0;
}

Menguji Aliran

Aliran dapat dikonversi menjadi bool: nilainya true saat dapat digunakan. if (!in) mendeteksi kegagalan secara ringkas.

#include <iostream>
#include <fstream>

int main() {
    std::ifstream in("nope_55555.txt");
    if (!in) std::cout << "stream not usable\n";
    else std::cout << "ok\n";
    return 0;
}

good, eof, fail, bad

Setiap bendera memiliki metode kueri: good(), eof(), fail(), dan bad().

#include <iostream>
#include <sstream>

int main() {
    std::istringstream s("abc");
    int x;
    s >> x; // fails: not a number
    std::cout << std::boolalpha;
    std::cout << "fail: " << s.fail() << '\n';
    std::cout << "bad: " << s.bad() << '\n';
    return 0;
}

Ekstraksi yang Gagal

Ketika >> tidak dapat mengurai tipe yang diharapkan, operator tersebut menetapkan failbit dan membiarkan target tetap tidak berubah.

#include <iostream>
#include <sstream>

int main() {
    std::istringstream s("hello");
    int n = -1;
    if (!(s >> n)) std::cout << "could not read an int, n stays " << n << '\n';
    return 0;
}

Menghapus Status

Setelah bendera kegagalan ditetapkan, aliran tetap tidak dapat digunakan sampai Anda memanggil clear() untuk mengatur ulang statusnya.

#include <iostream>
#include <sstream>

int main() {
    std::istringstream s("x 42");
    int n;
    s >> n;          // fails on 'x'
    s.clear();       // reset state
    std::string word;
    s >> word;       // now reads 'x'
    std::cout << "recovered: " << word << '\n';
    return 0;
}

Mengabaikan Masukan yang Buruk

Setelah clear(), gunakan ignore() untuk membuang karakter yang bermasalah sebelum mencoba lagi.

#include <iostream>
#include <sstream>
#include <limits>

int main() {
    std::istringstream s("bad 100");
    int n;
    while (!(s >> n)) {
        s.clear();
        s.ignore(std::numeric_limits<std::streamsize>::max(), ' ');
    }
    std::cout << "read " << n << '\n';
    return 0;
}

Membedakan EOF dari Galat

Setelah perulangan pembacaan berakhir, periksa apakah perulangan berakhir dengan eof() yang bersih atau kegagalan nyata berupa bad().

#include <iostream>
#include <sstream>

int main() {
    std::istringstream s("1 2 3");
    int x;
    while (s >> x) {}
    std::cout << std::boolalpha << "reached eof: " << s.eof() << '\n';
    std::cout << "hardware error: " << s.bad() << '\n';
    return 0;
}

Memeriksa Setelah Pembukaan

Selalu periksa aliran segera setelah membuka berkas agar kegagalan akibat jalur yang tidak ada atau tidak dapat dibaca dapat diketahui dengan cepat.

#include <iostream>
#include <fstream>

int main() {
    std::ifstream in("absent_11111.txt");
    if (!in.is_open()) {
        std::cout << "open failed, aborting\n";
        return 1;
    }
    std::cout << "never reached\n";
    return 0;
}

Mengaktifkan Eksepsi

Anda dapat meminta aliran untuk melemparkan eksepsi saat terjadi galat dengan exceptions(), sehingga kegagalan diam-diam menjadi std::ios_base::failure yang dapat ditangkap.

#include <iostream>
#include <fstream>

int main() {
    std::ifstream in;
    in.exceptions(std::ios::failbit);
    try {
        in.open("ghost_22222.txt");
    } catch (const std::exception& e) {
        std::cout << "caught open failure\n";
    }
    return 0;
}

Memvalidasi Jumlah Pembacaan

Setelah read biner, gcount() melaporkan jumlah byte yang benar-benar dibaca, sehingga Anda dapat mendeteksi pembacaan yang tidak lengkap.

#include <iostream>
#include <fstream>

int main() {
    int v = 9;
    std::ofstream("g.bin", std::ios::binary).write(reinterpret_cast<const char*>(&v), sizeof(v));
    int out;
    std::ifstream in("g.bin", std::ios::binary);
    in.read(reinterpret_cast<char*>(&out), sizeof(out));
    std::cout << "read " << in.gcount() << " bytes\n";
    return 0;
}

Perulangan Pembacaan yang Tangguh

Gabungkan teknik-teknik tersebut: uji aliran dalam perulangan, lalu setelah perulangan berakhir, bedakan penyelesaian yang bersih dari galat.

#include <iostream>
#include <sstream>

int main() {
    std::istringstream s("5 10 15");
    int total = 0, x;
    while (s >> x) total += x;
    if (s.eof()) std::cout << "sum = " << total << " (clean)\n";
    else std::cout << "error during read\n";
    return 0;
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang status aliran.

Ringkasan

Anda telah mempelajari penanganan galat aliran:

  • bendera status good/eof/fail/bad, yang diperiksa melalui metodenya atau dengan menguji aliran sebagai bool
  • clear() mengatur ulang status dan ignore() membuang masukan yang buruk
  • bedakan eof() yang bersih dari galat nyata; exceptions() dapat melemparkan eksepsi, dan gcount() memvalidasi pembacaan biner

Kursus berikutnya: menghasilkan bilangan acak dengan <random>.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Penanganan Error dan Status” gratis?

Ya — teks lengkap “Penanganan Error dan Status” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Penanganan Error dan Status”?

Periksa status stream Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Penanganan Error dan Status” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Membaca File dengan ifstream
  2. Menulis File dengan ofstream
  3. I/O File Biner
  4. Penanganan Error dan Status
← Kembali ke C++ Academy