Afficher un nombre

Résolu
enoitnaillal Messages postés 41 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 28 juin 2014 - 5 août 2010 à 15:48
enoitnaillal Messages postés 41 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 28 juin 2014 - 13 août 2010 à 15:34
Bonjour,
Je voudrais afficher un nombre exemple :
6555444 => 6 555 444, comment faire ?

13 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
5 août 2010 à 18:46
Salut,

Je ne crois pas qu'il y ait de fonction C standard pour ça.
Voilà un exemple à la main. Il doit y avoir de nombreuses méthodes... La mienne n'est certainement pas la meilleur !

#include <stdio.h>
#include <string.h>

int main ()
{
  char lpInput[300];
  char lpOutput[400];
  int nGroupSize;
  int nInputLen;
  int nI, nJ;
  
  gets(lpInput);

  nInputLen = strlen(lpInput);

  /* Calcul de la taille du premier groupe de chiffres */
  nGroupSize = nInputLen % 3;
  nGroupSize = (nGroupSize) ? nGroupSize : 3;

  nJ = 0;
  for (nI = 0; nI < nInputLen; nI++)
  {
    lpOutput[nJ] = lpInput[nI];
    nJ++;

    nGroupSize--;

    /* Si un groupe est complèté, on met un espace et on commence un nouveau groupe */
    if (! nGroupSize)
    {
      lpOutput[nJ] = ' ';
      nJ++;
      nGroupSize = 3;
    }
  }
  /* Ne pas oublier le zéro terminal */
  lpOutput[nJ] = 0;

  puts(lpOutput);

  return 0;
}
3
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
6 août 2010 à 13:07
Salut, alors désolé j'ai 2 semaine de C# donc bon :D. Si la longueur de ta chaine est toujours la même tu peux essayer ça :

string nombre = "6555444";
string espace = nombre.Substring(0, 1);
string espace2 = nombre.Substring(3, 3);
string espace3 = nombre.Substring(4, 3);
string addstring = espace + " " + espace2 + " " + espace3;

C'est moche mais ça marche :D.
Après si la longueur de la chaine est variable, doit y avoir moyen avec les conditions.



Linux c'est une question de VI ou de MORE !
Si Bill Gates donnait du lait à ses programmeurs, ça ferait peut-être des OS costaud.
3
enoitnaillal Messages postés 41 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 28 juin 2014 1
6 août 2010 à 14:53
J'aurais du préciser que mon nombre est contenu dans une variable de type int.
3
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
6 août 2010 à 17:25
Bah c'est pas compliqué !!

Tu prends le code de rt15 et tu remplaces :
gets(lpInput);

par
sprintf(lpInput, "%d", ton_int_de_depart);
3

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

Posez votre question
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
7 août 2010 à 16:48
Salut,

Pourquoi ne pas utiliser la prise en charge des paramètres régionaux ?

En C, sous unix, cela peut donner (attribut ' dans printf):
#include<locale.h>
#include<stdio.h>

int
main()
{
  int num = 6555444;
  setlocale(LC_ALL, "");
  printf("%d\n%'d\n", num, num);
  return 0;
}


Ou en C++ (c++.com) (standard):
#include<locale>
#include

int
main()
{
  std::locale loc("");
  std::cout.imbue(loc);
  std::cout << 6555444 << std::endl;
  return 0;
}


Bonne prog,
3
enoitnaillal Messages postés 41 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 28 juin 2014 1
9 août 2010 à 14:10
Je vous remercie d'avoir essayé de m?aider, malheureusement rien ne fonctionne dans mon cas.
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
9 août 2010 à 19:06
Si tu souhaites plus d'aide, il va falloir être nettement plus précis.

Quel est ton environnement (Le code de Chouchou182 ne fonctionne très probablement pas sous Windows) ?

Quel code as-tu essayé (Copie colle ici par exemple) ? Es-tu parvenu à compiler ? Quel message d'erreur ou fonctionnement non attendu te fait dire que cela ne fonctionne pas ?
3
enoitnaillal Messages postés 41 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 28 juin 2014 1
10 août 2010 à 14:38
Mon environnement c'est Windows, logiciel de programmation Dev c++. En effet le code de chouchou82 ne fonctionne pas, j'arrive à le compiler et à l'exécuter mais ça n'a aucun effet.

Celui de rt15 compile mais à l'exécution il plante à peine lancé.

Celui de theflayer ce n'est pas du c++, enfin il me semble, d'ailleurs le compilateur le confirme.
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 août 2010 à 08:01
Ah, mon code plante ? Quel message d'erreur ?

Tu as compris qu'il fallait entrer un nombre puis appuyer sur entrée ?

Il plante avant ou après l'entrée du nombre ? Si après l'entrée du nombre, quel nombre as-tu essayé ?
3
enoitnaillal Messages postés 41 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 28 juin 2014 1
12 août 2010 à 14:32
Désolé de t?apprendre que ton code plante. Il est vrai que mes connaissances en c++ ne sont pas extraordinaire mais quand mm.
Pour en revenir au code, il plante après l'entrée du nombre, donc aucun message d'erreur à la compilation ni ensuite, difficile de connaitre la cause.
3
enoitnaillal Messages postés 41 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 28 juin 2014 1
12 août 2010 à 14:43
J'ai essayé le nombre que j'ai donné en exemple (6555444).
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 août 2010 à 18:06
Bin c'est moi qui suis désolé. D'autant plus que j'ai du mal à voir mon erreur.

Comment compiles-tu ?
(Au fait, c'est du C, pas du C++, mais devrait aussi fonctionner en C++)
Pourrais-tu essayer ce code (Le même que précédemment mais avec des messages de diagnostique) et copier coller la sortie ici ?

#include <stdio.h>
#include <string.h>

int main ()
{
  char lpInput[300];
  char lpOutput[400];
  int nGroupSize;
  int nInputLen;
  int nI, nJ;
  
  gets(lpInput);
 
  printf("Récupération chaîne terminée\n");

  printf("Chaîne "%s" récupérée\n", lpInput);

  nInputLen = strlen(lpInput);

  printf("Taille de la chaîne rentrée : %d\n", nInputLen);

  /* Calcul de la taille du premier groupe de chiffres */
  nGroupSize = nInputLen % 3;
  nGroupSize = (nGroupSize) ? nGroupSize : 3;
  printf("Taille du premier groupe : %d\n", nGroupSize);

  nJ = 0;
  for (nI = 0; nI < nInputLen; nI++)
  {
    printf("nJ %d, nI %d, lpInput[nI]=%c\n", nJ, nI, lpInput[nI]);
    lpOutput[nJ] = lpInput[nI];
    nJ++;

    nGroupSize--;

    /* Si un groupe est complèté, on met un espace et on commence un nouveau groupe */
    if (! nGroupSize)
    {
      printf("Fin de groupe\n");
      lpOutput[nJ] = ' ';
      nJ++;
      nGroupSize = 3;
    }
  }
  /* Ne pas oublier le zéro terminal */
  printf("Ajout du zéro terminal en %d\n", nJ);
  lpOutput[nJ] = 0;

  printf("Affichage de la sortie\n");
  puts(lpOutput);
  printf("Fin du programme\n");

  return 0;
}
3
enoitnaillal Messages postés 41 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 28 juin 2014 1
13 août 2010 à 15:34
J'ai repris ton code, je l'ai retravaillé, j'ai ajouté quelques instructions :
#include <cstdio>, #include <cstdlib>, #include et using namespace std maintenant ça marche avec tous les nombres.
Je te remercie pour ton aide efficace.
3
Rejoignez-nous