Dévoilement du mystère derrière le comportement imprévisible de cout avec des caractères non signés
En programmation, une sortie inattendue peut souvent conduire à de la frustration et de la confusion. Considérons le code suivant :
#include<iostream> #include<stdio.h> using namespace std; int main() { unsigned char a; a = 1; printf("%d", a); cout << a; }
Ce code est conçu pour imprimer la valeur stockée dans la variable char non signée 'a', qui est 1. Cependant, une fois exécuté, il imprime "1" suivi de quelques éléments apparemment personnages aléatoires. Pourquoi cout se comporte-t-il différemment de printf dans ce scénario ?
La réponse réside dans la nature du caractère non signé. Les caractères ASCII attribués aux valeurs 0 à 31 sont considérés comme non imprimables. Le caractère affecté à la valeur 1 est un caractère non imprimable, qu'il est de toute façon possible de tenter d'imprimer. Pour déterminer si un caractère est imprimable, vous pouvez utiliser la fonction std::isprint :
std::cout << std::isprint(a) << std::endl;
Cette instruction affichera 0 (faux), indiquant que le caractère n'est pas imprimable.
Pour résoudre ce problème et forcer cout à imprimer la valeur de a comme 1, vous pouvez le convertir en un entier non signé :
cout << static_cast<unsigned>(a) << std::endl;
Ceci cast convertit le caractère non imprimable en sa valeur entière non signée correspondante, garantissant que cout imprime 1 correctement.
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!