LANGAGE C

amin009 Messages postés 121 Statut Membre -  
pyschopathe Messages postés 2053 Statut Membre -
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. 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
  2. kill4m Messages postés 260 Statut Membre 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
  3. Droopy_ Messages postés 252 Statut Membre 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
    1. toto
       
      Il s'agit de comprendre son erreur et de corriger son programme, qui a certainement du bon puisqu'il fonctionne jusqu'à 32000
      0
  4. kill4m Messages postés 260 Statut Membre 26
     
    sans le code pas facile de l'aider ....
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. amin009 Messages postés 121 Statut Membre
     
    je crois qu'un entier dépasse 32000 se convertir son code ASCI SUR UN NOMBRE DE BIT PLUS QU'UN ENTIER <3200
    0
  7. amin009 Messages postés 121 Statut Membre
     
    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
  8. kill4m Messages postés 260 Statut Membre 26
     
    essaye de remplacer :while ( n/i !=0)
    par while ( (double)n/i !=0)
    0
  9. kill4m Messages postés 260 Statut Membre 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
    1. pyschopathe Messages postés 2053 Statut Membre 137
       
      Tu auras une conversion en int, pas de problème à ce niveau...
      0