Probleme de programation en C

NoWiS Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
 Guki -
J'ai un probleme dans mon programme écrit en C.
Tout d'abord, le voici :

#include <stdio.h>

unsigned long nombre;
int chf_total;

int compte_chiffre(unsigned long x);

int main()
{
      puts("Entrer l'entier positif (max 4 294 967 295) dont vous souhaitez que le programme analyse :");
      scanf("%ld", &nombre);
      chf_total=compte_chiffre(nombre);
      if(chf_total>1 && chf_total<10)
         printf("\nCe nombre possede %d chiffres.\n\n", chf_total);
      else
         puts("\nCe nombre possede 1 chiffre.\n");
      system("PAUSE");
      return 0;
}


int compte_chiffre(unsigned long x)
{
    int a=9, b=10, total=0;
    unsigned long y;
    do
    {
        y=x-a;
        a+=(9*b);
        b*=10;
        total++;
    }while(y>0);
    return total;
}


Le probleme se situe apres le scanf, le programme ne fait plus rien, comme si il était dans une boucle infinie.
Merci de votre aide.

2 réponses

Guki
 
Salut!

Je note déjà un problème au niveau de la boucle while, la condition est d'abord évaluée puis le bloc est exécuté alors que tu n'as pas initialisé la variable y dans la fonction compte_chiffre ce qui engendre un comportement "aléatoire" de la boucle.
0
Guki
 
Il y a plus simple pour compter le nombre de digit d'un nombre entrée au clavier. Il suffit d'enregistrer directement la valeur dans une chaine puis compter le nombre de caractères précedent de caractère 0 qui termine la chaine.

/* exemple */

char s[10];
int i;

scanf("%s" &s);

/* boucle */
0