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. 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
      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. je crois qu'un entier dépasse 32000 se convertir son code ASCI SUR UN NOMBRE DE BIT PLUS QU'UN ENTIER <3200
        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. essaye de remplacer :while ( n/i !=0)
            par while ( (double)n/i !=0)
            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...