C++ problem char

Julien -  
fiddy Messages postés 441 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.

5 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  3. dharth Messages postés 145 Statut Membre 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
    1. Julien
       
      Oui exacte j'ai pas précisé que j'utilise :
      using namespace std;

      pour éviter d'avoir à mettre "std::"
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. 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
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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