Conversion

Fermé
amin009 Messages postés 112 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 février 2010 - 18 nov. 2008 à 16:43
 toto - 18 nov. 2008 à 17:24
Bonjour,
je declare une variable entier dans un prog c qui a pour but de deterniner le nombre de chiffres d'un entier ,
mais lorsque je saisi un entier >=32000 le programme affiche comme resultat 15, j'ai besoin d'une explication
merci.

7 réponses

Bonjour

L'explication, c'est que ton programme est mal fait.
Pour pouvoir te dire plus de détails, il faudrait que tu le montres.
La limite ne serait pas plutôt 32768 ?
0
amin009 Messages postés 112 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 février 2010
18 nov. 2008 à 16:50
mon programme est fonctionne correctement a des entiers <32000 ?
0
Un programme qui donne de réponses correctes dans certains cas n'est PAS un programme correct s'il en donne des mauvaises dans d'autres cas.
Tu ne trouves pas ça évident ?
0
amin009 Messages postés 112 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 février 2010
18 nov. 2008 à 16:59
COMMENT JE CORRIGE MON PROGRAMME?
0

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

Posez votre question
Comment je peux le savoir si tu ne le montres pas ?
0
amin009 Messages postés 112 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 février 2010
18 nov. 2008 à 17:05
#include <stdio.h>
void main()
{
int n,i,ch;

printf("donner un nombre";
scanf("%d",&n);
ch=0;
i=1;
while ( n/i !=0)
{ch=ch+1;
i=i*10;}
printf(""%d",ch);
}
0
Le problème c'est que tu travailles avec des entiers de 16 bits
quand tu es rendu à 5 chiffres, tu essayes ensuite une division par 100 000 pour tester s'il y a un sixième chiffre. Mais ta multiplication 10 000 par 10 ne te donne pas 100 000 (qui ne tient pas sur 16 bits) mais je ne sais quel nombre (tu peux le vérifier en faisant des print

Il serait beaucoup plus simple de diviser ton nombre par 10 à chaque tour, il n'y aurait jamais de débordement
0