Afficher un nombre [Résolu]

Signaler
Messages postés
41
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
28 juin 2014
-
Messages postés
41
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
28 juin 2014
-
Bonjour,
Je voudrais afficher un nombre exemple :
6555444 => 6 555 444, comment faire ?

13 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
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;
}
Messages postés
125
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
21 juin 2015
2
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.
Messages postés
41
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
28 juin 2014
1
J'aurais du préciser que mon nombre est contenu dans une variable de type int.
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Bah c'est pas compliqué !!

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

par
sprintf(lpInput, "%d", ton_int_de_depart);
Messages postés
252
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
25 avril 2011

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,
Messages postés
41
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
28 juin 2014
1
Je vous remercie d'avoir essayé de m?aider, malheureusement rien ne fonctionne dans mon cas.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
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 ?
Messages postés
41
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
28 juin 2014
1
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.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
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é ?
Messages postés
41
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
28 juin 2014
1
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.
Messages postés
41
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
28 juin 2014
1
J'ai essayé le nombre que j'ai donné en exemple (6555444).
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
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;
}
Messages postés
41
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
28 juin 2014
1
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.