Maison >développement back-end >C++ >Comment puis-je restaurer l'état d'origine de std::cout après avoir modifié ses indicateurs de formatage ?

Comment puis-je restaurer l'état d'origine de std::cout après avoir modifié ses indicateurs de formatage ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-02 15:11:13643parcourir

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

Restauration de l'état de std::cout après modification

En C , la manipulation des flux d'entrée/sortie peut temporairement modifier leur état. Par exemple, l'extrait de code ci-dessous modifie la base de std::cout en hexadécimal :

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

Après le retour de printHex, la sortie ultérieure vers std::cout continuera à utiliser la base hexadécimale, ce qui pourrait conduire à des résultats inattendus. Pour résoudre ce problème, nous avons besoin d'un moyen de restaurer l'état d'origine de std::cout.

Solution

La solution implique l'utilisation de std::ios_base::fmtflags classe pour capturer et restaurer les indicateurs de formatage du flux. Voici comment procéder :

  1. Inclure ou .
  2. Au début de la fonction qui modifie std::cout:

    std::ios_base::fmtflags f( cout.flags() );

    Ceci stocke les indicateurs de formatage actuels dans la variable f.

  3. Effectuez les modifications nécessaires à std::cout.
  4. À la fin de la fonction, après avoir remis le flux à son état d'origine :

    cout.flags( f );

    Cela restaure les drapeaux de formatage qui ont été capturés au début de la fonction.

  5. Exemple

    Dans l'extrait de code ci-dessous, la fonction restaurerCoutState capture et restaure l'état de 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
    }

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn