Maison > développement back-end > C++ > le corps du texte

Pourquoi `cout` n'imprime-t-il pas correctement les caractères non signés en C ?

DDD
Libérer: 2024-11-27 06:01:08
original
127 Les gens l'ont consulté

Why Doesn't `cout` Print Unsigned Characters Correctly in C  ?

cout ne parvient pas à imprimer des caractères non signés : résoudre le problème

En C , le problème de cout qui n'imprime pas de caractères non signés est souvent rencontré. Pour comprendre cela, analysons l'exemple de code fourni :

#include<iostream>
#include<stdio.h>

using namespace std;

main() {
    unsigned char a;
    a = 1;
    printf("%d", a);
    cout << a;
}
Copier après la connexion

Dans ce code, la variable char non signée a reçoit la valeur 1. Lors de l'impression de a à l'aide de printf, le résultat est "1". Cependant, la sortie utilisant cout << a affiche un caractère apparemment aléatoire.

La raison de cette différence est que un caractère non signé peut stocker des valeurs de 0 à 255. Lorsque a vaut 1, il correspond au caractère ASCII non imprimable 'SOH' (début de titre). printf gère les caractères non imprimables différemment de cout.

Pour déterminer si un caractère est imprimable, utilisez la fonction std::isprint :

std::cout << std::isprint(a) << std::endl;
Copier après la connexion

Cela affichera "0", indiquant que 'SOH' n'est pas imprimable.

Pour forcer cout à imprimer 1, convertissez a en un non signé entier :

cout << static_cast<unsigned>(a) << std::endl;
Copier après la connexion

Cela imprimera avec succès "1."

Comprendre la différence fondamentale entre printf et cout dans la gestion des caractères non imprimables est crucial pour résoudre ce problème. De plus, std::isprint peut aider à déterminer si un caractère doit être imprimé sous une forme lisible par l'homme.

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal