Problème de type de données C++ [Résolu/Fermé]

Signaler
Messages postés
7
Date d'inscription
vendredi 25 mars 2011
Statut
Membre
Dernière intervention
14 octobre 2012
-
Edwyn
Messages postés
105
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
31 mars 2011
-
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à ?
Messages postés
7
Date d'inscription
vendredi 25 mars 2011
Statut
Membre
Dernière intervention
14 octobre 2012

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 !
bah déjà t'additionne des char dans ton sprintf, c'est pas logique...
cout << hex << ascii1;
ça te donne quoi ?
Messages postés
105
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
31 mars 2011
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 !
Messages postés
7
Date d'inscription
vendredi 25 mars 2011
Statut
Membre
Dernière intervention
14 octobre 2012

cout << hex << ascii1; donne 4 (pour une valeur souhaitée de 106)


Merci à Edwyn - je testerai plus tard
#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;
}
Messages postés
7
Date d'inscription
vendredi 25 mars 2011
Statut
Membre
Dernière intervention
14 octobre 2012

Merci à Francis pour la réponse, qui marche !

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