LANGAGE C

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.
Configuration: Windows XP
Firefox 2.0.0.18

8 réponses

  1. 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
    1. 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..
      1. Tu auras une conversion en int, pas de problème à ce niveau...
    2. essaye de remplacer :while ( n/i !=0)
      par while ( (double)n/i !=0)
      1. 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);
        }
        1. je crois qu'un entier dépasse 32000 se convertir son code ASCI SUR UN NOMBRE DE BIT PLUS QU'UN ENTIER <3200
          1. 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++;
            1. Il s'agit de comprendre son erreur et de corriger son programme, qui a certainement du bon puisqu'il fonctionne jusqu'à 32000
          2. 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