CONVERTIR (CHAINE -> NOMBRE) ET (NOMBRE -> CHAINE) [DEV-C++]

MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009 - 24 mars 2002 à 08:58
fabiencpp Messages postés 18 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 13 août 2003 - 12 août 2003 à 12:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/9575-convertir-chaine-nombre-et-nombre-chaine-dev-c

fabiencpp Messages postés 18 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 13 août 2003
12 août 2003 à 12:21
Voila une solution tres bien pour recuperer chaque digit d'un nombre

void display_nb(int nb)
{
char c;
if(nb < 0)
{
write(1,'-',1);
nb = -nb;
}
if(nb > 10)
display_nb(nb/10);
c = nb%10 + '0';
write(1,&c,1); // peut etre remplacer parce que l'on veut fichier,memoire etc
}
Dun23 Messages postés 8 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 23 mai 2003
23 mai 2003 à 11:05
Tiens, j'oubliais, un truc pour passer d'un entier à un char:

int num=3; // c'est un exemple
char monchar;

monchar = num + '0';

L'astuce, on ajoute à notre entier la valeur du code ASCII du chiffre 0.
Notre char se voit donc attribuer la valeur ASCII du caractère 3;
Dun23 Messages postés 8 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 23 mai 2003
23 mai 2003 à 11:01
Bon, pour garder la partie entière d'un nombre après une division, il y a plus simple. Bon, Le % fonctionne très bien et c'est à priori le mieux pour ce que tu fais. Sinon, il y a les fonctions floor et ceil (je sais plus quelle librairie il faut utiliser) qui renvoient un entier, soit directement inférieur, soit directement supérieur. Le transtypage fonctionne aussi, cad que tu veux que le résultat soit un entier eg:
result = (int)(nombre/10);
Sinon, je connaissais pas cgvt, je vais essayertiens pour voir, p't'être amusant!
THEREALKILLER Messages postés 88 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 27 mars 2006
17 août 2002 à 20:54
pe t etre interessant mais ca ne sert a rien
THEREALKILLER Messages postés 88 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 27 mars 2006
17 août 2002 à 20:54
pe t etre interessant mais ca ne sert a rien
cs_thitoune Messages postés 124 Date d'inscription mardi 19 février 2002 Statut Membre Dernière intervention 7 mars 2004 2
25 mars 2002 à 21:07
bon, c'est pas pour faire le beau, mais il y a beaucoup plus simple que tout ce que vous dites, regardez plutot (c pas moi qui l'ai fait) mais il n'empêche :
/* gcvt example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
char buffer [20];
gcvt (1365.249,6,buffer);
puts (buffer);
gcvt (1365.249,3,buffer);
puts (buffer);
return 0;
}

Output:
1365.25
1.37e+003
djweirdo Messages postés 2 Date d'inscription samedi 14 octobre 2000 Statut Membre Dernière intervention 25 mars 2002
25 mars 2002 à 17:58
Le commentaire précédent est très bon, mais tu devrais essayer d'utiliser les Logs et les puissances de 10, com ca tu pourrais boucler et ne pas limiter ta fonction aux unités de mille.
En plus c'est une fonction intéressante car tu peut y insérer un espace en guise de séparateur de millier....
Bon courage..
MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
24 mars 2002 à 08:58
Salut !
Pas mal com idée ! mais a mon avis, c un peu long pour ce que tu fé !
si com tu le dit tu ve écrire ta valeur sous forme de texte, il est plus simple d'utiliser printf (ou fprintf), qui écrira directement la valeur.

Et pour ce qui est de décortiquer (com tu dit), il y a bcp plus simple :


int a,b,c,d; // initialisés en tant que INT com ca, pas de virugles !
a = nombre/1000;
nombre= nombre%1000; // renvoi le reste de la division entière !
b=nombre/100;
nombre=nombre%100;
c=nombre/10;
nombre=nombre%10;
d=nombre;

et a mon avis, y'a encore moyen de faire plus cour ! mais là, c la seule idée que j'ai eu !
A+
NICO
Rejoignez-nous