LANGAGE C

amin009 Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   -  
pyschopathe Messages postés 1974 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

8 réponses

toto
 
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   Statut Membre Dernière intervention   26
 
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   Statut Membre Dernière intervention   25
 
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
toto
 
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   Statut Membre Dernière intervention   26
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   26
 
essaye de remplacer :while ( n/i !=0)
par while ( (double)n/i !=0)
0
kill4m Messages postés 224 Date d'inscription   Statut Membre Dernière intervention   26
 
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 1974 Date d'inscription   Statut Membre Dernière intervention   135
 
Tu auras une conversion en int, pas de problème à ce niveau...
0