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
Libérer: 2024-12-02 15:11:13
original
710 Les gens l'ont consulté

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..
}
Copier après la connexion

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() );
    Copier après la connexion

    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 );
    Copier après la connexion

    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
    }
    Copier après la connexion

    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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal