[C++] sprintf en C++ [Résolu]

Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
- - Dernière réponse : lpi_info
Messages postés
8
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
27 juin 2010
- 6 mai 2009 à 16:24
Bonjour,


j'ai une question un peu stupide, mais quelle est la traduction en C++ de sprintf.


Je m'explique avec ce petit exemple qui ne fait pas grand chose en fait mais qui explique + ou - ce que je voudrai:

int i = 1;

while (...)

{

   sprintf(name,"image%03d.jpg",i);

   cout << name << endl;

   i++;

}



en sortie j'obtiens ainsi :



image001.jpg



image002.jpg



...



image010.jpg



image011.jpg



...



Bien que je puisse utiliser sprintf, je préfère l'éviter.


J'utilise pour ce faire des stringstream mais je ne sais pas comment traduire le %03d si quelqu'un pouvait m'éclairer.



D'avance merci !

TuRn3r
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
11
3
Merci
 cout.width(3); // si tu fais comme ca, ca marche pas



 cout.fill('0'); 

 for(i=0; i < 15; i++)


    {


        cout << "Image";





        cout << i;


        cout << ".jpg" << endl;


    } 


   for(i=0; i < 15; i++)

    {

        cout << "Image";
        cout.width(3); // faut le mettre juste avant le champ que tu veux modifier sinon ca marche pas

        cout.fill('0');

        cout << i;

        cout << ".jpg" << endl;

    }


Ici c'est avec cout, mais avec les stringstream ca doit marcher aussi

++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_laurent1024
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
11
0
Merci
Avec ton stringstream tu doit pouvoir utiliser les fonctions width et fill

version :

int entier = 10;

stringstream s;

s.width(3); // laisse 3 caracteres pour l'affichage des  entiers

s.fill('0'); // si l'entier a moins de 3 chiffres on complete avec des 0

s << entier;


++
Commenter la réponse de cs_laurent1024
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
0
Merci
Ah tiens, je connaissais pas ca, mais c'est pas encore exactement ca que je veux

Dans cette exemple, comment ecris-tu le %03d de sprintf en C+

+


Parceque la ca ne me sors que





image1.jpg

image2.jpg

...

image10.jpg

image11.jpg


stringstream name;

int i = 1;
while (...)
{
  
name << "image" << i << ".jpg"
;
   cout << name << endl;
   i++;
}


Merci pour ton aide !

TuRn3r
Commenter la réponse de turnerom
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
0
Merci
Merci, ca marche impek !

TuRn3r
Commenter la réponse de turnerom
Messages postés
8
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
27 juin 2010
0
Merci
 Bonjour ,franchement moi aussi bloqué dans une situation pareille,c'est que je sais pas comment je peux traduire ces fonction sous C++,voila un morceau de mon code sous C:
    int i;
    char * toto;
    FILE * fich;

    nomFic = new char[30];

    sprintf (toto, "%dinv_modele.txt", nbSymbol);

    fichier = fopen (toto,"a+");
    if (fichier != NULL)
    {
        fprintf(fichier,"%d %d ", numSymbol, numSymbol);

        for (i=0; i<nb_iter_teta; i++)
        {       
            fprintf(fichier,"%d ",R_sign[i]);
        }

        fprintf(fichier,"\n");

        fclose(fichier);
    }
    else
        printf("Pb d'ouverture de fichier\n");
}

si qlq 1 peut m aidé svp. merci d avance
Commenter la réponse de lpi_info