Printf char*

Flow8002 Messages postés 21 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 21 novembre 2012 - 17 févr. 2010 à 15:09
cptpingu Messages postés 3835 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 1 novembre 2022 - 18 févr. 2010 à 11:05
Bonjour ,

J'ai un petit soucis je n'arrive pas a imprimer un char *.
je m'explique , j'ai un char *test qui contiens deux valeurs.

test[0]=9;
test[1]=7 ;

lorsque que je fait printf("%c",test );
je le fait separement cout << test[0] ou test[1] cela maffiche bien 9 ou 7 mais je narrive pas a coller les deux valeurs :/
Pour moi il devrait m'afficher la lettre a car en ascii 97 = a .
sela ne fonctionne pas et je ne vois pas du tout comment proceder ...

si quelqu'un pouvait m'aider ca serait cool .

Bonne journée

13 réponses

cptpingu Messages postés 3835 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 1 novembre 2022 124
17 févr. 2010 à 15:46
Non testé, mais devrait fonctionner:

#include 
int main()
{
  char test[3];
  test[0] = 9; // caractère n9 non imprimable
  test[1] = 7; // caractère n7 non imprimable
  test[2] = 97; // caractère n97 : a

  std::cout << test[0] << test[1] << test[2] << std::endl;

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
Flow8002 Messages postés 21 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 21 novembre 2012
17 févr. 2010 à 15:53
Bonjour ,

Merci de ta reponse , mais ce n'est pas exactement ce que je veux faire .
ce que je veux c'est pouvoir coller les deux valeur de test[0] et test[1] pour me donner 97 et pouvoir l'imprimer en a .
en gros un peu ce style la test[3]=test[0]+test[1]==>test[3]=97 .
puis une fois que j'ai le code ascii de mon caractere je l'imprime .

printf ("%c",test[3]);

et a l'ecran j'aurais ==> a
0
cptpingu Messages postés 3835 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 1 novembre 2022 124
17 févr. 2010 à 15:56
Je n'en vois pas vraiment l'intérêt, mais avec un tout petit peu de math:

#include 

int main()
{
  char test[3];
  test[0] = 9; // caractère n9 non imprimable
  test[1] = 7; // caractère n7 non imprimable
  test[2] = (test[0] * 10 + test[1]);

  std::cout << test[2] << std::endl;

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
Flow8002 Messages postés 21 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 21 novembre 2012
17 févr. 2010 à 16:09
en faite je vais t'expliquer tout le contexte .

J'ai crée une classe de grand entier .
en mode console je fait un scanf de ce que je tape ensuite chaque caractere tapé sont crypter puis exporter dans un fichier texte ==> la c'est ok .
la deuxieme partie est le decriptage donc quand je decrypte ma chaine je me retrouve avec un pointeur avec n index (la valeur de mon caractere en ascii )
le truc c'est que la valeur de mon pointeur n'est pas constante donc les math me servent pas ici :/
donc pour finaliter reinprimer mon code decrypter à l'ecran .

genre , texte crypter :

0768432143753453434534345345344364324368454134654435435451435431540
0768432143753453434534345345344364324368454134654435435451435431540
0768432143753453434534345345344364324368454134654435435451435431565
0768432143753453434534345345344364324368454134654435435451435431544
0768432143753453434534345345344364324368454134654435435451435431557
0768432143753453434534345345344364324368454134654435435451435431559
0768432143753453434534345345344364324368454134654435435451435431564


texte en ascii :
97
122
101
114
116
121

et l'ideal pour finir

azerty
0

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

Posez votre question
cptpingu Messages postés 3835 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 1 novembre 2022 124
17 févr. 2010 à 16:20
Crypter ne veut rien dire => on dit chiffrer (voir wikipédia)

Tu convertis ta chaîne "97" en entier. Tu fais rentrer cette entier dans un char. Tu imprimes le char.
Tu fais de même pour tous les caractères.

Conversion:
http://cpp.developpez.com/faq/cpp/?page=strings#STRINGS_convert_to

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
Flow8002 Messages postés 21 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 21 novembre 2012
17 févr. 2010 à 16:25
merci pour ton aide .
je regarde ca tout de suite .
Bonne journée a toi .
0
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
17 févr. 2010 à 19:39
Salut,

atoi() et itoa() sont bien pratique pour ce genre de manipulation.

A+

 
0
cptpingu Messages postés 3835 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 1 novembre 2022 124
17 févr. 2010 à 19:42
Non, juste non.
Si c'est du C++, alors on utilise les string stream (notamment la technique que j'ai mis en lien).
atoi et itoa sont à proscrire.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
17 févr. 2010 à 19:43
printf("%c%c",test[0], test[1]);

 
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
17 févr. 2010 à 19:58
Au debut du post il parle de char*.
En quoi atoi() serait à proscrire en ce cas ?
Ce sera énormément plus performant que des string stream.

ciao...
BruNews, MVP VC++
0
Flow8002 Messages postés 21 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 21 novembre 2012
17 févr. 2010 à 21:42
Bonsoir tout le monde ,


j'ai teste les differentes solutions proposée mais malheuresement ca ne marche pas :/
ci joint mon code de test :


std::printf("%d%d",m_digits[0], m_digits[1]);
cout <<endl;
char*test ;
test ="97";
cout << test[0] <<endl;//renvoie 9
cout << test[1] <<endl;//renvoie 7
int z ;
z=atoi(test); 
cout << z << endl ;//Ok
std::printf ("%c",z);//Ok

char*test2 ;
test2=new char[2];
test2[0]=9;
test2[1]=7;
cout << test2[0] <<endl;//Non ok
cout << test2[1] <<endl;//Non ok

int w ;
w=atoi(test2);  //Non ok
cout <<"test2 : "<< w << endl ;//Non Ok
std::printf ("%c",w);//Non Ok

int y ;

y=atoi(m_digits);//renvoie 0
cout << y <<endl; //renvoie 0



Tu convertis ta chaîne "97" en entier. Tu fais rentrer cette entier dans un char. Tu imprimes le char.
Tu fais de même pour tous les caractères.


J'ai pas vu une fonction me permettant de convertir mon char *



printf("%c%c",test[0], test[1]);


Malheuresement cette commande ne me permet pas d'afficher le caractere recompose ascii en caractere :/

atoi() et itoa() sont bien pratique pour ce genre de manipulation.


j'avais trouvé cette fonction que j'ai trouvé fort sympatique mais elle ne marche pas avec mon pointeur , pourquoi ? ben je sais pas :/ voire mon code .


le pire c'est que ca doit etre quelquechose de tout bete :'(
0
Flow8002 Messages postés 21 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 21 novembre 2012
17 févr. 2010 à 22:04
C'est bon j'ai trouvé ci -joint le code desfois que ca interesse quelqu'un :
int i ;
char *retour ;
retour =new char [m_taille];
for (i=0;i<m_taille;i++)
{
retour[i]=m_digits[i]+'0';

}
i=atoi(retour);
std::printf ("%c",i);


Par contre ca m'affiche ma derniere ligne en double ..

ci-joint le code :
while(!feof(fichier))
{
fgets(ligne,255, fichier);


 d=ligne;
d=d-a;
d.decrypter();
}


Bonne soirée.
0
cptpingu Messages postés 3835 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 1 novembre 2022 124
18 févr. 2010 à 11:05
En quoi atoi() serait à proscrire en ce cas ?

C++ != C.
Si on fait du C++, on code en C++. On ne bidouille pas du C par dessus.
Donc tout ce qui est: std::printf, atoi, char*, feof, fgets, ça donne envie de pleurer du sang...
(En C++ je parle, en C pas de souci)

J'ai pas vu une fonction me permettant de convertir mon char *

Je t'ai donné un lien qui pointait sur la fonction qui le faisait...

Si tu n'utilises pas les avantages du C++, alors faits ton code en C. Le C est un autre langage, qui a ses avantages et ses défauts. Mais tu sembles n'utiliser que du C, autant t'affranchir du C++.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0