C++ problem char

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.

5 réponses

  1. Contributeur
    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
    1. Contributeur
      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
      1. 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
        1. Oui exacte j'ai pas précisé que j'utilise :
          using namespace std;

          pour éviter d'avoir à mettre "std::"
          0
      2. 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
        1. Contributeur
          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
        2. Contributeur
          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
        3. Contributeur
          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
        4. Contributeur
          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
        5. Contributeur
          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