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

Résolu/Fermé
Bertrand Denecker Messages postés 7 Date d'inscription vendredi 25 mars 2011 Statut Membre Dernière intervention 14 octobre 2012 - 25 mars 2011 à 16:32
Edwyn Messages postés 105 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 31 mars 2011 - 28 mars 2011 à 14:36
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

Salut,
ça t'affiche quoi là ?
0
Bertrand Denecker Messages postés 7 Date d'inscription vendredi 25 mars 2011 Statut Membre Dernière intervention 14 octobre 2012
25 mars 2011 à 16:52
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
bah déjà t'additionne des char dans ton sprintf, c'est pas logique...
cout << hex << ascii1;
ça te donne quoi ?
0
Edwyn Messages postés 105 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 31 mars 2011 14
Modifié par Edwyn le 25/03/2011 à 17:01
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
Bertrand Denecker Messages postés 7 Date d'inscription vendredi 25 mars 2011 Statut Membre Dernière intervention 14 octobre 2012
25 mars 2011 à 17:04
cout << hex << ascii1; donne 4 (pour une valeur souhaitée de 106)


Merci à Edwyn - je testerai plus tard
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
#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
Bertrand Denecker Messages postés 7 Date d'inscription vendredi 25 mars 2011 Statut Membre Dernière intervention 14 octobre 2012
25 mars 2011 à 20:53
Merci à Francis pour la réponse, qui marche !

Je testerai plus tard la solution d'Edwyn
0
Edwyn Messages postés 105 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 31 mars 2011 14
28 mars 2011 à 14:36
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