cs_darkwhite
Messages postés133Date d'inscriptionvendredi 17 novembre 2000StatutMembreDernière intervention29 avril 2008
-
18 août 2007 à 18:49
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 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++;
}
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 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.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 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.