IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Afficher un int


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Afficher un int
    Ce code m'affiche que les 2 premiers chiffres (34), si qqn sait d'où vient le prob merci de me le signaler !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    void	my_putchar(char c)
    {
      write(1,&c,1);
    }
     
    int	my_put_nbr(int nb)
    {
      int	temp;
      int	mult;
     
      mult = 1;
      temp = nb;
      while (temp > 10)
        {
          nb = nb / 10;
          mult = mult * 10;
          if (nb < 10)
    	{
    	  my_putchar(nb + '0');
    	  nb = (temp - (nb * mult)); 
    	  temp = nb;
    	}    
        }
      nb = nb % 10;
      my_putchar(nb + '0');
      my_putchar('\n');
    }
     
    int	main(int ac, char **av)
    {
      my_put_nbr(345);
    }

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Bonsoir a toi !

    Plusieurs petite remarques :

    La fonction main revoit un int, donc il faut faire un return. Ton compilo aurait du te mettre au moins un warning !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int main(int argc, char *argv[])
    {
      my_put_nbr(345);
     
     return 0;
    }
    La meme remarque : tu declare la fonction my_put_nbr comme retournant un int ... mais tu ne faus aucun return. Si la fonction retourne effectivement un int .... que veut-il dire ?



    On peut utiliser des raccourcis pratiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mult = mult * 10;
    mult *= 10;
    Les deux ligne font exactement la meme chose, mais lorsque tu as un long nom d'acces a la variable (au travers d'une/plusieurs structure), ben c'est plus pratique ^^


    Le mieux est d'initialiser la variable dès sa creation si possible, sa raccourci le nombre de ligne et ne nuit aucunement a la lisibilité.

    Il aurait été TRES bienvenue si tu avais commenter ton code.
    Je ne suis pas dans ton cerveau, et les méandres par lesquelles tu est passer pour pondre ca sont plutot tortueuse ...

    En bref, tu veux ecrire un par un les chiffre du nombre donné au debut a ce que j'ai compris.

    La seul chose qui me chiffone c'est ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void	my_putchar(char c)
    {
      write(1,&c,1);
    }
    Je ne connaissais pas write, je suis donc aller chercher son prototype.
    Voici ce que j'ai trouvé :

    write(fichier, &tableau[i], sizeof tableau[0]);
    Si on compare a ce que tu as, je ne suis d'accord qu'avec le deuxime argument.

    Pour le troisieme, on attend un sizeof. Il aurait fallu faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void	my_putchar(char c)
    {
      write(1,&c,sizeof(char));
    }
    pour plus de rigueur.

    La ou ca me derange, c'est que le premier argument doit apparement etre un fichier ...
    Je ne sais pas vraiment ce qu'on doit mettre, je te laisse verifier.



    Enfin, pour conclure, voici ce que je te propose comme correction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>
     
     
    void my_putchar(char c)
    {
        write(1,&c,sizeof(char));
    }
     
    void my_put_nbr(char nombre[])
    {
        int i;
        for (i=0 ; nombre[i] != NULL ; i++)
            my_putchar(nombre[i]);
    }
     
    int	main(int argc, char *argv[])
    {
        my_put_nbr("345");
     
        return EXIT_SUCCESS;
    }
    Je ne passe plus un int, je passe un tableau de caractere. Celui ci est automatiquement completer par "NULL" (ou 0 en code ASCII), d'ou la condition du while. Si tu dois absolument passer un int, on peut faire quelque chose de semblable a ce que tu as fait.

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Ce code m'affiche que les 2 premiers chiffres (34), si qqn sait d'où vient le prob merci de me le signaler !
    Ta gestion de mult est incorrecte :
    En prenant l'exemple de 345 et en faisant mentalement tourner ton programme (ou en utilisant l'outil indispensable qu'est un debugger) :

    - Au départ : nb = 345, mult = 1;

    - On va arriver à nb = 3, mult = 100, l'affichage de 3 et nb et temp prennent la valeur 45

    - Ca se gâte ensuite : nb va passer à 4 et mult à 1000 !!! affichage du 4 et nb et temp prennent la valeur 45-4000 = -3955.

    Il est plus simple de procéder comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    - détermination de la valeur max de mult :
       1- initialiser temp par nb et mult à 1
       2- tant que temp >10, multiplier mult par 10 et diviser temp par 10
    - affichage :
       3- tant que mult est supérieur à 0
         3-1 afficher nb/mult
         3-2 remplacer la valeur de nb par le reste de la division de nb par mult
         3-3 diviser mult par 10

    Note : Pourquoi utiliser la fonction non standard write(), alors que la fonction standard fpuc() fait parfaitement l'affaire ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher un 'long long int'
    Par uriotcea dans le forum C
    Réponses: 37
    Dernier message: 13/01/2009, 16h27
  2. Afficher code binaire d'un int
    Par TSalm dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 20/11/2007, 17h15
  3. afficher un unsigned int
    Par m0ul3sh0t dans le forum C
    Réponses: 10
    Dernier message: 13/11/2007, 14h39
  4. [javascript][Struts] recupere un int et afficher un string
    Par debutant.informatique dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/04/2006, 21h28
  5. afficher int dans jtextfield
    Par bmw13fr dans le forum Langage
    Réponses: 4
    Dernier message: 24/02/2006, 08h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo