Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Memulihkan Keadaan Asal std::cout Selepas Mengubah Suai Bendera Pemformatannya?

Bagaimanakah Saya Boleh Memulihkan Keadaan Asal std::cout Selepas Mengubah Suai Bendera Pemformatannya?

Mary-Kate Olsen
Lepaskan: 2024-12-02 15:11:13
asal
708 orang telah melayarinya

How Can I Restore the Original State of std::cout After Modifying its Formatting Flags?

Memulihkan Keadaan std::cout selepas Pengubahsuaian

Dalam C , memanipulasi aliran input/output boleh mengubah keadaannya buat sementara waktu. Sebagai contoh, coretan kod di bawah mengubah suai asas std::cout kepada perenambelasan:

void printHex(std::ostream& x){
    x << std::hex << 123;
}

int main(){
    std::cout << 100; // prints 100 base 10
    printHex(std::cout); // prints 123 in hex
    std::cout << 73; // problem! prints 73 in hex..
}
Salin selepas log masuk

Selepas kembali daripada printHex, output seterusnya kepada std::cout akan terus menggunakan asas perenambelasan, yang berpotensi membawa kepada hasil yang tidak dijangka. Untuk menangani perkara ini, kita memerlukan cara untuk memulihkan keadaan asal std::cout.

Penyelesaian

Penyelesaian melibatkan penggunaan std::ios_base::fmtflags kelas untuk menangkap dan memulihkan bendera pemformatan strim. Begini cara untuk melakukannya:

  1. Sertakan atau .
  2. Pada permulaan fungsi yang mengubah suai std::cout:

    std::ios_base::fmtflags f( cout.flags() );
    Salin selepas log masuk

    Ini menyimpan bendera pemformatan semasa dalam pembolehubah f.

  3. Lakukan pengubahsuaian yang diperlukan untuk std::cout.
  4. Pada penghujung fungsi, selepas mengembalikan strim kepada keadaan asalnya:

    cout.flags( f );
    Salin selepas log masuk

    Ini memulihkan bendera pemformatan yang telah ditangkap pada mulanya daripada fungsi.

  5. Contoh

    Dalam coretan kod di bawah, fungsi restoreCoutState menangkap dan memulihkan keadaan std::cout:

    void restoreCoutState(std::ostream& os){
        std::ios_base::fmtflags f( os.flags() );
        os << std::hex << 123;
        os.flags( f );
    }
    
    int main(){
        std::cout << 100; // prints 100 base 10
        restoreCoutState(std::cout); // prints 123 in hex
        std::cout << 73; // prints 73 base 10
    }
    Salin selepas log masuk

    Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memulihkan Keadaan Asal std::cout Selepas Mengubah Suai Bendera Pemformatannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan