C++ problem char

Julien -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un probleme avec les char, j'essai de convertir un char en int et de le comparer avec un autre int, mais je n'ai jamais d'égalité.

Alors j'ai assayé d'afficher le char :

char test = 'h';
Console::WriteLine("Mon char : "+ test );

Mais dans la console ca m'affiche :

Mon char : 104

Je débute en C++, et je ne vois vraiment pas d'où vient le problème

Je travaille sous Visual Studio 2010.

Merci d'avance pour votre aide.

A voir également:

5 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

char test='h';
Avec cette instruction, test représente le code ascii de 'h' (104). Donc, c'est comme si tu faisais char test=104.
La concaténation de la chaîne "mon char : " avec test donne donne "mon char : 104"; rien d'anormal.
C'est quoi le problème ?
1
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Nous non plus nous ne pouvons pas comprendre.
montre nous ton problème. Là tu montre juste que tu affiche "104", ce qui est surement normal.
0
linkcr15 Messages postés 362 Date d'inscription   Statut Membre Dernière intervention   12
 
Oui je ne vois pas où est le problème car h vaut bien 104 (voir table ASCII : http://www.asciitable.com/index/asciifull.gif
0
dharth Messages postés 140 Date d'inscription   Statut Membre Dernière intervention   13
 
Pour l'affichage moi j'utilise cout.

#include <iostream>

int main()
{
     char test = 'h';

     std::cout << test << std::endl;
     return (0);
}


#console: ./tonprog
h
#console:

tu aura bien un h qui sera affiché (suivit d'un '\n' du au std::endl)
0
Julien
 
Oui exacte j'ai pas précisé que j'utilise :
using namespace std;

pour éviter d'avoir à mettre "std::"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Julien
 
Merci pour vos réponses, je ne savais pas que les "char" renvoyaient naturellement la valeur ASCII en C++.
Je trouvais ca étrange, mais puisque c'est comme ca j'ai cherché une solution pour garder le caractère 'h' et j'ai trouvé ca :

stringstream ss;
string s
char test = 'h';
ss << test;
ss >> s;
Console::WriteLine("Mon char : "+ s );

Et la ca m'affiche bien :
Mon char : h
Dans la console
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Etrange ?
Il n'y a rien d'étrange, ni de magique dedans. char représente un nombre de 0 à 255 (pour faire simple). Il ne faut pas confondre 'h' (caractère représentant le code ascii 104) avec "h".
Si tu fais string test = "h". Tu pourras faire "Mon char : " + test; sans problème.
C'est d'ailleurs ce que tu fais en passant par stringstream.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
juste pour pinaillé un peu; char peut représenté des nombre de -128 à 127.
Il n'était pas clair dans ton problème du dessus que ce n'était qu'un problème d'affichage.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Je savais très bien qu'on me reprendrait dessus. C'est precisément pour ça que j'ai explicitement mis (pour faire simple). Mais ici ça ne change pas le raisonnement : concaténation d'une chaîne et d'un entier. C'est normal que l'affichage soit comme ça.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Console::WriteLine("Mon char : "+ s );
n'est pas un standard C++, il faudrait savoir d'où ça vient. Je suis même étonné qu'il affiche 104. Il doit y avoir un mécanisme du genre Console::WriteLine(String); + un conversion implicite de int vers String et de const char* vers String.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Effectivement Console::WriteLine() n'est pas un standard C++. Mais il utilise VS 2010 et il doit donc s'agir de C++ CLI (flag /clr).
Dans ce cas, les chaînes "..." sont converties en type String.
Ensuite, il s'agit de la surchage de l'opérateur "+" qui fait "Mon char : 104".
0