J'imprime un booléen
dans un flux de sortie de cette manière :
#include
int main()
{
std::cout << false << std::endl;
}
Est-ce que la norme exige un résultat spécifique sur le flux (par exemple, 0
pour false
) ?
J'imprime un booléen
dans un flux de sortie de cette manière :
#include
int main()
{
std::cout << false << std::endl;
}
Est-ce que la norme exige un résultat spécifique sur le flux (par exemple, 0
pour false
) ?
Les flux standards ont un indicateur boolalpha
qui détermine ce qui est affiché -- quand il est faux, ils s'affichent en tant que 0
et 1
. Quand il est vrai, ils s'affichent en tant que false
et true
.
Il y a aussi un manipulateur std::boolalpha
pour définir l'indicateur, donc ceci :
#include
#include
int main() {
std::cout<
``...produit une sortie comme suit :
0
false
En ce qui concerne la localisation, le mot réel produit lorsque boolalpha
est défini sur true est localisé -- c'est-à-dire que a une catégorie num_put
qui gère les conversions numériques. Ainsi, si vous imbuez un flux avec la bonne localisation, il peut/va imprimer true
et false
tels qu'ils sont représentés dans cette localisation. Par exemple,
#include
#include
#include
int main() {
std::cout.imbue(std::locale("fr"));
std::cout << false << "\n";
std::cout << std::boolalpha;
std::cout << false << "\n";
return 0;
}
...et au moins en théorie (en supposant que votre compilateur/bibliothèque standard accepte "fr" comme identifiant pour "français") cela pourrait imprimer faux
au lieu de false
. Je dois ajouté cependant que le support réel pour cela est inégal au mieux - même la bibliothèque Dinkumware/Microsoft (habituellement assez bonne à cet égard) imprime false
pour chaque langue que j'ai vérifiée.
Les noms utilisés sont définis dans une facette numpunct
cependant, donc si vous voulez vraiment qu'ils s'impriment correctement pour une langue particulière, vous pouvez créer une facette numpunct
pour cela. Par exemple, une qui (je crois) est au moins raisonnablement précise pour le français ressemblerait à ceci :
#include
#include
#include
#include
#include
class my_fr : public std::numpunct< char > {
protected:
char do_decimal_point() const { return ','; }
char do_thousands_sep() const { return '.'; }
std::string do_grouping() const { return "\3"; }
std::string do_truename() const { return "vrai"; }
std::string do_falsename() const { return "faux"; }
};
int main() {
std::cout.imbue(std::locale(std::locale(), new my_fr));
std::cout << false << "\n";
std::cout << std::boolalpha;
std::cout << false << "\n";
return 0;
}
Et le résultat est (comme vous pourriez vous y attendre) :
0
faux``
0 sera imprimé.
Comme en C++ true se réfère à 1 et false se réfère à 0.
Dans le cas où vous voulez imprimer false au lieu de 0, vous devez définir le drapeau de format boolalpha pour le flux str.
Lorsque le drapeau de format boolalpha est défini, les valeurs booléennes sont insérées/extraites par leur représentation textuelle : soit true soit false, au lieu de valeurs intégrales.
#include
int main()
{
std::cout << std::boolalpha << false << std::endl;
}
output:
false
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.