LANGAGE C

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:57
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 - 18 nov. 2008 à 17:42
Bonjour,
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.

8 réponses

Le problème vient du débordement de la multiplication de i par 10 à chaque tour.
Il vaudrait mieux diviser n, on ne déborderait jamais
3
kill4m Messages postés 224 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 janvier 2012 26
18 nov. 2008 à 17:00
mais ton code plz, le problème doit venir d'ailleur car entier -> int va jusqu'a 32767 je crois donc c'est autre chose
0
Droopy_ Messages postés 248 Date d'inscription dimanche 16 novembre 2008 Statut Membre Dernière intervention 17 janvier 2009 25
18 nov. 2008 à 17:04
Bonjour,

Et tu le fais comment ton calcul du nombre de chiffres ?
Il faut être plus précis...

J'ai deux méthodes en tête, sans chercher :
Utiliser une fonction Logarithme base 10, qui te donne directement ton résultat (à plus ou moins 1, je crois)

ou un truc du genre :

count=0;
do
{
count++;
nb /= 10;
} while (nb);

Ou plus court, mais pas forcement plus propre :

count=1;
while (nb/=10) count++;
0
Il s'agit de comprendre son erreur et de corriger son programme, qui a certainement du bon puisqu'il fonctionne jusqu'à 32000
0
kill4m Messages postés 224 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 janvier 2012 26
18 nov. 2008 à 17:10
sans le code pas facile de l'aider ....
0

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

Posez votre question
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:11
je crois qu'un entier dépasse 32000 se convertir son code ASCI SUR UN NOMBRE DE BIT PLUS QU'UN ENTIER <3200
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:13
voici le code:
#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
kill4m Messages postés 224 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 janvier 2012 26
18 nov. 2008 à 17:17
essaye de remplacer :while ( n/i !=0)
par while ( (double)n/i !=0)
0
kill4m Messages postés 224 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 janvier 2012 26
18 nov. 2008 à 17:21
enfaite non sa marchera pas ce que je viens de dire, mais a mon avis le problème vient du fait que la division n/i qui sont tous les 2 des int donne un résultat à virgule qui ne peut pas être stocker dans un int.

hors la variable temporaire de stockage sera un int..
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
18 nov. 2008 à 17:42
Tu auras une conversion en int, pas de problème à ce niveau...
0