Probleme de programation en C

Fermé
NoWiS Messages postés 16 Date d'inscription vendredi 27 août 2004 Statut Membre Dernière intervention 15 octobre 2004 - 15 oct. 2004 à 22:49
 Guki - 15 oct. 2004 à 23:37
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

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
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