Problème de type de données C++

Résolu
Bonjour,



J'essaie de faire un programme qui saisit 4 lettres et affiche une chaîne concaténée qui agrège les codes ASCII des 4 lettres.

Ex : saisie de j, o, u, r et sortie de la chaîne unique 106 111 117 114

Voici un essai qui ne fonctionne pas à partir de la concaténation (tout se passe comme si ascii1, ... ascii4 contenaient des valeurs telles que 1 ou 2 ...)

// AL_cours_1_seq_2_exo_cours_09g.cpp : définit le point d'entrée pour l'application console.
//

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
char lettre1, lettre2, lettre3, lettre4;
char buffer[50];
string concat;

int ascii1, ascii2, ascii3, ascii4;
// lettre 1
cout << "Entrez la 1° lettre : ";
cin >> lettre1;
ascii1=sprintf(buffer,"%ld\n",lettre1);
printf("Le code ASCII vaut : %s\n",buffer,ascii1);
// lettre2
cout << "Entrez la 2° lettre : ";
cin >> lettre2;
ascii2=sprintf(buffer,"%ld\n",lettre2);
printf("Le code ASCII vaut : %s\n",buffer,ascii2);
// lettre 3
cout << "Entrez la 3° lettre : ";
cin >> lettre3;
ascii3=sprintf(buffer,"%ld\n",lettre3);
printf("Le code ASCII vaut : %s\n",buffer,ascii3);
// lettre 4
cout << "Entrez la 4° lettre : ";
cin >> lettre4;
ascii4=sprintf(buffer,"%ld\n",lettre4);
printf("Le code ASCII vaut : %s\n",buffer,ascii4);

// concaténation
concat=sprintf("%ls",ascii1+ascii2+ascii3+ascii4);
printf("La chaîne concaténée vaut : %s\n",buffer,concat);
getch();
return 0;
}

Merci de m'aider à corriger ce programme (testé sur Visual C++)

7 réponses

  1. Salut,
    ça t'affiche quoi là ?
    0
    1. Voici le message d'erreur que j'ai :

      1>------ Début de la génération : Projet : AL_cours_1_seq_2_exo_cours_09g, Configuration : Debug Win32 ------
      1>Compilation en cours...
      1>AL_cours_1_seq_2_exo_cours_09g.cpp
      1>f:\mes_documents\mes_documents_1\bts_ig_année_1\bts_ig_1_visual_cpp\al_cours_1_seq_2_exo_cours_09g\al_cours_1_seq_2_exo_cours_09g\al_cours_1_seq_2_exo_cours_09g.cpp(21) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
      1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : voir la déclaration de 'sprintf'
      1>f:\mes_documents\mes_documents_1\bts_ig_année_1\bts_ig_1_visual_cpp\al_cours_1_seq_2_exo_cours_09g\al_cours_1_seq_2_exo_cours_09g\al_cours_1_seq_2_exo_cours_09g.cpp(26) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
      1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : voir la déclaration de 'sprintf'
      1>f:\mes_documents\mes_documents_1\bts_ig_année_1\bts_ig_1_visual_cpp\al_cours_1_seq_2_exo_cours_09g\al_cours_1_seq_2_exo_cours_09g\al_cours_1_seq_2_exo_cours_09g.cpp(31) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
      1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : voir la déclaration de 'sprintf'
      1>f:\mes_documents\mes_documents_1\bts_ig_année_1\bts_ig_1_visual_cpp\al_cours_1_seq_2_exo_cours_09g\al_cours_1_seq_2_exo_cours_09g\al_cours_1_seq_2_exo_cours_09g.cpp(36) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
      1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : voir la déclaration de 'sprintf'
      1>f:\mes_documents\mes_documents_1\bts_ig_année_1\bts_ig_1_visual_cpp\al_cours_1_seq_2_exo_cours_09g\al_cours_1_seq_2_exo_cours_09g\al_cours_1_seq_2_exo_cours_09g.cpp(40) : error C2664: 'sprintf' : impossible de convertir le paramètre 2 de 'int' en 'const char *'
      1> La conversion d'un type intégral en type pointeur nécessite reinterpret_cast, un cast de style C ou un cast de style fonction
      1>Le journal de génération a été enregistré à l'emplacement "file://f:\Mes_documents\Mes_documents_1\BTS_IG_Année_1\BTS_IG_1_Visual_Cpp\AL_cours_1_seq_2_exo_cours_09g\AL_cours_1_seq_2_exo_cours_09g\Debug\BuildLog.htm"
      1>AL_cours_1_seq_2_exo_cours_09g - 1 erreur(s), 4 avertissement(s)
      ========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

      C'est indigeste

      Sinon, par un cout << ascii1, j'obtenais un des premiers symboles ASCII (tel que coeur, carreau, ...)

      Un grand merci pour la réponse !
      0
      1. bah déjà t'additionne des char dans ton sprintf, c'est pas logique...
        cout << hex << ascii1;
        ça te donne quoi ?
        0
    2. Bonjour,

      Alors moi personnelement j'utiliserais les casts les flux.
      Je veux dire cin >> char1
      cout << static_cast<short>(char1)

      Autant utiliser le C++ à fond plutôt que de retourner au C.

      Cordialement

      Avec L'informatique on sait toujours quand on commence... Mais jamais quand on termine !
      0
      1. cout << hex << ascii1; donne 4 (pour une valeur souhaitée de 106)

        Merci à Edwyn - je testerai plus tard
        0
        1. #include <iostream>
          using namespace std;

          int main(int argc, char *argv[])
          {
          char variable[4];

          for(int i=0;i<4;i++)
          {
          cout << "saisir variable " << i << endl;
          cin >> variable[i];
          }

          for(int i=0;i<4;i++)
          cout << (int) variable[i] << " - ";
          cout << endl;

          cin >> variable[0];
          return 0;
          }
          0
          1. Merci à Francis pour la réponse, qui marche !

            Je testerai plus tard la solution d'Edwyn
            0
            1. En fait c'est la même solution que celle proposé par francis.
              En utilisant un static_cast et pas un cast C. (d'ailleur c'est ce que fqit le cqst C dans ce cas la (un static_cast))

              Cordialement,
              0