Partage
  • Partager sur Facebook
  • Partager sur Twitter

Passage d'une commande C en C++

la fonction sprintf

Sujet résolu
    26 juin 2007 à 17:10:57

    Bonjour je voudrai passer cette commande :
    sprintf(temps, "Temps : %d", compteur);


    en C++.

    Le C++ étant récent pour moi je galére un peu.

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      26 juin 2007 à 17:31:57

      Tu inclue les en-tete du C (version C++ cad : sans le .H et avcc un c devant leur nom |exm stdlib.h => cstdlib |) dans ton programme.
      Mais il est très très rare que l'on ai besoin de faire appel a sprintf en C++.
      Dit plutôt nous ce que tu veux faire.
      • Partager sur Facebook
      • Partager sur Twitter
        26 juin 2007 à 18:50:55

        J'utilise SDL et C++ pour la conception d'un petit jeu.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          26 juin 2007 à 19:01:43

          Je parlai au niveau de ta chaine.
          Tu peux faire :

          std::string s("Temps ");
          s<<compteur;
          texte = TTF_RenderText_Shaded(police, s.c_str(), couleurNoire, couleurBlanche);

          • Partager sur Facebook
          • Partager sur Twitter
            26 juin 2007 à 19:10:21

            Voila le morceau de code incomplet certe mais qui devrait me permettre d'afficher la vie du héros
            //Chargement de la police et de tous se qui sera néssaire a l'afichage de la vie
                TTF_Font *police = NULL;
                SDL_Rect positionTexte;
                police = TTF_OpenFont("POLICE",TAILLE_POLICE);
                SDL_Color couleurVie = {255, 0, 0}; //Couleur pour écrire le niveau de vie
                SDL_Surface *texte = NULL;
                char niv_Vie[20] = "";
                sprintf(niv_Vie,"VIE : /*La je met quoi ? flux ou %qqc*/ ",vie_h);
                texte = TTF_RenderText_Blended(police,, couleurNoire);

            • Partager sur Facebook
            • Partager sur Twitter
              26 juin 2007 à 19:24:26

              Davidbrcz : std::string ne fournit pas une définition de l'opérateur de redirection de flux pour ce type d'opérations, à ce que je sache ?

              Perso, j'utilise une fonction template (après tout, on est dans le forum C++) permettant d'insérer n'importe quel objet dans une string, pourvu qu'il définisse correctement ce type d'opérateurs :

              template <typename T>
              std::string toString(const T &toConvert)
              {
                  std::stringstream ss;
               
                  ss << toConvert;

                  return ss.str();
              }

              //Utilisation :

              std::string str("Toto");

              str << " a " << toString<size_t>(7) << " ans";
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                26 juin 2007 à 19:26:25

                Tu oublie sprintf.
                Tu fais :

                string niv_Vie("VIE : ");
                niv_Vie<<vie_h;
                texte = TTF_RenderText_Blended(police,niv_Vie.c_str(), couleurNoire);
                • Partager sur Facebook
                • Partager sur Twitter
                  26 juin 2007 à 19:37:11

                  Ok merci beaucoup c'est ça que je cherché
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 juin 2007 à 19:39:22

                    Citation : Davidbrcz

                    Tu oublie sprintf.
                    Tu fais :


                    string niv_Vie("VIE : ");
                    niv_Vie<<vie_h;
                    texte = TTF_RenderText_Blended(police,niv_Vie.c_str(), couleurNoire);


                    Ce n'est pas censé marché, std::string n'est pas un flux.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      26 juin 2007 à 20:00:18

                      c'est vrai, j'ai mixé pas inatention string et ostringstream.
                      Désolé.
                      La version qui marche devient :


                      #include <sstrem>
                      using namespace std;
                      //...
                      ostringstream niv_Vie;
                      niv_Vie<<"VIE : "<<vie_h;
                      texte=TTF_RenderText_Blended(police,niv_Vie.str(), couleurNoire);

                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 juin 2007 à 20:07:52

                        Toujours pas :D <police nom="courrier">niv_Vie.str().c_str()</police> C'est lourd à utiliser manuellement, mieux vaut se faire une petite fonction comme kidpaddle2 ou utiliser boost::lexical_cast<>.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          26 juin 2007 à 20:12:37

                          C'est lourd , mais ca compile et ca marche.
                          Edit: Comment ca, c'est lourd ?
                          Edit² : on peut faire encore plus lourd :

                          #include <sstrem>
                          using namespace std;
                          //...
                          ostringstream niv_Vie;
                          niv_Vie<<"VIE : "<<vie_h;
                          string s=niv_Vie.str();
                          texte=TTF_RenderText_Blended(police,s.c_str(), couleurNoire);
                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 juin 2007 à 20:20:46

                            Ben, tu t'imagines écrire ces 3 lignes à chaque fois avant de convertir quelque chose en une chaîne ?

                            Fondamentalement, on veut une application qui à un objet d'un type précis associe sa représentation sous forme de chaîne de caractères.

                            C'est pour ça que je disais que c'était mieux de faire une fonction ou d'utiliser celles qui existent déjà.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              26 juin 2007 à 20:25:31

                              oui.
                              Mais il pas demandé ca.
                              Apres c'est a lui de faire le travail de factorisation.
                              Moi je lui montre la méthode , c'est tout.
                              Si ca se trouve , il n'a que cela a affiché.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                26 juin 2007 à 20:47:11

                                Je ne compte afficher que la vie mais je débute en C++ je me suis arrété juste avant la création de classe voir si j'avais assimiler se que j'avais déja apris. Et je ne sais pas se qu'est la factorisation en C++.

                                Un peu d'aide (ou des liens) seraient la bien venu

                                Merci de votre compréhension pour faciliter la mienne.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  26 juin 2007 à 21:10:57

                                  La factorisation , c'est comme en maths.
                                  C'est regrouper le code qui ce répète.
                                  Cela revient a créer des fonctions/classes selon notre besoin pur éviter de toujours faire la même chose.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    26 juin 2007 à 21:13:02

                                    La factorisation n'est pas un terme ayant un sens distinct en programmation : c'est une image que l'on utilise pour une idée de "compression du code".

                                    On t'a déjà donné de l'aide. Je comprends que ton manque d'expérience en C++ t'empêche -pour le moment- d'utiliser des templates, mais néanmoins, pour le peu qu'il y a à comprendre, tu peux bien remarquer que le corps de la fonction que j'ai donné est le même que celui donné par Davidbrcz.

                                    Ainsi, un peu de jugeotte te permettrait d'adopter cett partie de code pour ce dont tu as besoin...
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      26 juin 2007 à 23:42:50

                                      Donc merci déja j'ai compris se que vous vouliez dire par factorisation.
                                      J'ai à peuprés compris le code utilisant le template (je croyais que c'était en rapport avec le codage de site web ...) j'ai donc pris et adapté le code de Davidbrcz en
                                      SDL_Surface *texte = NULL;
                                          ostringstream niv_Vie;
                                          niv_Vie<<"VIE : "<<vie_h;
                                          texte = TTF_RenderText_Blended(police,niv_Vie.str(), couleurVie);


                                      Et pour finir je voudré juste savoir si j'ai compris le code si dessus

                                      ostringstream niv_Vie; crée niv_Vie de type ostringstream (pas sur que l'on dit comme ça)et je devine au nom que ça sert à modifier des chaines

                                      niv_Vie<<"VIE : "<<vie_h; on met dans niv_Vie "VIE : " et la variable vie_h

                                      Le .str() de niv_Vie.str() dans la derniére ligne indique que l'on place la niv_Vie qui est une chaine

                                      J'ai bon ? :euh:



                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        27 juin 2007 à 9:54:49

                                        Presque.
                                        1)ostringstream sert a effectuer un formatatge en mémoire (comme sprintf)
                                        2) Bon
                                        3)Presque. str() retourne une copie la string associé au tampon de ostringstream.
                                        Par contre je me pose une question :
                                        Ya til une conversion implicite de std::string -> en const char * ?
                                        Car si il n'y en pas , il faufrai faire :
                                        texte = TTF_RenderText_Blended(police,niv_Vie.str().c_str(), couleurVie);
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          27 juin 2007 à 10:58:20

                                          Personnelement je ne peut te rendre car c'est une amie à moi qui s'occupe des design (sont rêve était de faire de l'infographie c'est pas un si mauvais début...) mais elle n'a pas encore commencé donc je ne peut pas compiler pour te répondre...
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            27 juin 2007 à 11:16:10

                                            Quel rapport ?

                                            Davidbrcz -> Je doute qu'il y ait conversion implicite... c_str() est toujours utilisé pour passer une std::string en tant que chaîne de caractère de type const char *.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              27 juin 2007 à 11:21:48

                                              Ben pour le rapport si lors de la compilation ou de l'éxécution j'ai une érreur cela signifira qu'il n'y à pas de conversion implicite entre std::string -> en const char * non ? :euh:
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                27 juin 2007 à 11:27:30

                                                Si les images ne sont pas encore présentes, ce ne sera pas une erreur de compilation, mais une erreur à l'exécution... 'faut bien faire la part des choses entre le statique et le dynamique.
                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Passage d'une commande C en C++

                                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                • Editeur
                                                • Markdown