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

Résolu
Bertrand Denecker Messages postés 10 Statut Membre -  
Edwyn Messages postés 105 Statut Membre -
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. Bertrand Denecker Messages postés 10 Statut Membre
     
    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. francis
       
      bah déjà t'additionne des char dans ton sprintf, c'est pas logique...
      cout << hex << ascii1;
      ça te donne quoi ?
      0
  2. Edwyn Messages postés 105 Statut Membre 14
     
    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
  3. Bertrand Denecker Messages postés 10 Statut Membre
     
    cout << hex << ascii1; donne 4 (pour une valeur souhaitée de 106)

    Merci à Edwyn - je testerai plus tard
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. francis
     
    #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
  6. Bertrand Denecker Messages postés 10 Statut Membre
     
    Merci à Francis pour la réponse, qui marche !

    Je testerai plus tard la solution d'Edwyn
    0
  7. Edwyn Messages postés 105 Statut Membre 14
     
    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