Printf char*

Signaler
Messages postés
21
Date d'inscription
mardi 6 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2012
-
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
-
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

Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
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]
Messages postés
21
Date d'inscription
mardi 6 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2012

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
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
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]
Messages postés
21
Date d'inscription
mardi 6 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2012

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
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
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]
Messages postés
21
Date d'inscription
mardi 6 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2012

merci pour ton aide .
je regarde ca tout de suite .
Bonne journée a toi .
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014

Salut,

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

A+

 
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
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]
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014

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

 
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
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++
Messages postés
21
Date d'inscription
mardi 6 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2012

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 :'(
Messages postés
21
Date d'inscription
mardi 6 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2012

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.
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
107
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]