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
Mary-Kate Olsenasal
2024-12-02 15:11:13638semak imbas

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..
}

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() );

    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 );

    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
    }

    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:
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