Multiplier un nombre a virgules

Résolu
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008 - 18 août 2007 à 18:49
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 19 août 2007 à 15:09
Salut a tous,
le principe de mon code est de multiplier par 3 un nombre decimal ecrit en notation française :
xx,xx.
j'ai donc ecrit ce code :

#include <stdio.h>

int main()
{
  char nombre[256];
  int i=0,j=0,rang=0;
double resultat=0;
  scanf("%s",&nombre);
//Le principe est de stocker le nombre dans une variable double
//Mais il faut connaitre la position de la virgule
 
  while(nombre[i]!='\0')
    {
          //Lorsqu'on arrive a la virgule il faut commencer a compter combien de chiffres sont
          // presents apres la virgule
            if(nombre[i]==',')
            {
              i++;
              j= i;
                while(nombre[j]!='\0')
                      {
                            rang*=10;
                            j++;
                        }
                }
      resultat+=nombre[i];
      resultat*=10;
      i++;
    }

  resultat=(resultat*3)/rang;
printf("%d\n",(int)resultat);
}

Or à l'execution j'ai constaement :
darkwhite:/media/sda5/Dossier pierre/c/ioi# ./triple
4
-2147483648

Ce qui selon mon faible niveau est synonyme de depassement de capacité ??

3 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
18 août 2007 à 19:06
Toujours le même problème...
nombre[i] ne contient pas le chiffre mais le code ASCII du caractère
=> pour obtenir le chiffre on fait nombre[i]-'0' ou nombre[i] - 0x30 ce qui revient au même.
Par ailleurs initialise rang avec 10 au lieu de 0;
Enfin pour la sortie printf("%lf\n",resultat), je vois pas pourquoi convertir en entier puisque tu perds la virgule.

C'était pas dépassement de capacité mais division par 0 suivi de conversion hasardeuse.

Bonne prog.
1
cs_darkwhite Messages postés 133 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 29 avril 2008
18 août 2007 à 20:05
Merci,
Mais a la fin je veux le transformer en int.
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
19 août 2007 à 15:09
Complètement inutile.

Un double a un poids de 64 bits et un int a un poids de 32 bits.
Il y aura donc perte de donnée. Comme précisé par juju12, tu perdras tout ce qui se trouve après la virgule.

C++ (@++)<!--
0
Rejoignez-nous