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 :

transformer float en char


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    896
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 896
    Par défaut transformer float en char
    bonjour à tous,
    J'essaie en vain de convertir du float en char pour être plus précis j'ai converti du char en float avec la fonction atof et je voudrais reconvertir ce float en char en utilisant la fonction sprintf :
    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
    #include <stdio.h>
    #include <stdlib.h>
    int main (int argc, char *argv[])
    {
      double plusgrand;
      int i;
      char buf[256];
      if (argc<3)  /* argc nombre de paramètres passés au programme */
      {
        printf("pas assez de paramètres\n");
        return -1;
      }
      plusgrand=atof(argv[1]);         
      for (i=2;i<argc;i++)
      {
        printf("Valeur de argv i-1 = %s\n", argv[i-1]);
        printf("valeur de atof i-1 = %f\n", atof(argv[i-1]));
        printf("Valeur de argv i = %s\n", argv[i]);
        printf("valeur de atof i = %f\n", atof(argv[i]));
        if (atof(argv[i])>atof(argv[i-1]))
          {
            sprintf(buf, "%s",plusgrand); /* c'est içi que j'utilise la fonction sprintf */
            printf("i>i-1...plusgrand est %s\n",buf);
          }
      }
      printf("Le plus grand est %f\n", plusgrand);
      sprintf(buf, "%s",plusgrand);
      printf("Le + grand est %s\n",buf);
      return 0;
    }
    il me renvoit :i>i-1...plusgrand est (null)
    )


    Si quelqu'un peut m'"expliquer Merçi

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    plusgrand est un double, tu dois donc utiliser "%f" et non "%s"

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    Je ne peux que souscrire à la remarque de Neckara

    Juste au passage, le reste du code mérite aussi un petit coup d'oeil, si tu veux, par exemple que le résultat affiché ne soit pas systématiquement la première valeur entrée en paramétre, il faut penser à modifier la valeur de la variable plusgrand

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Si les paramètres de ton programme ne sont pas des nombres, la fonction atof() rend un résultat erroné mais tu ne peux pas le savoir. Il faut lui préférer la fonction strtod() qui permet de vérifier la validité du retour si la robustesse de ton programme est importante*.

    Voir : http://man.developpez.com/man3/atof.3.php et http://man.developpez.com/man3/strtod.3.php

    * : j'ai même envie de dire qu'il vaut mieux toujours utiliser strtod() même si on ne se sert pas des vérifications d'erreur, histoire de bannir atof().

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    896
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 896
    Par défaut réponse à Bktero
    Citation Envoyé par Bktero Voir le message
    Si les paramètres de ton programme ne sont pas des nombres, la fonction atof() rend un résultat erroné mais tu ne peux pas le savoir. Il faut lui préférer la fonction strtod() qui permet de vérifier la validité du retour si la robustesse de ton programme est importante*.

    Voir : http://man.developpez.com/man3/atof.3.php et http://man.developpez.com/man3/strtod.3.php

    * : j'ai même envie de dire qu'il vaut mieux toujours utiliser strtod() même si on ne se sert pas des vérifications d'erreur, histoire de bannir atof().
    Merçi pour ta réponse.
    En fait j'ai modifié le code :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    int main (int argc, char *argv[])
    {
      double plusgrand;
      int i;
      char buf[256];
     if (argc<3)  /* argc nombre de paramètres passés au programme */
      {
        printf("pas assez de paramètres\n");
        return -1;
      }  
      plusgrand=atof(argv[1]);
      for (i=2;i<argc;i++)
      {
        printf("Valeur de argv i-1 = %s\n", argv[i-1]);
        printf("valeur de atof i-1 = %f\n", atof(argv[i-1]));
        printf("Valeur de argv i = %s\n", argv[i]);
        printf("valeur de atof i = %f\n", atof(argv[i]));
        if (atof(argv[i])>atof(argv[i-1]))
          {
            plusgrand=atof(argv[i]);
            sprintf(buf, "%f",plusgrand);
            printf("i>i-1...plusgrand est %s\n",buf);
          }
      }
      printf("Le plus grand est %f\n", plusgrand);
      sprintf(buf, "%f",plusgrand);
      printf("Le + grand est %s\n",buf);
      return 0;
    }
    Sans aller pour l'instant sur la fonction strtod(), j'ai une réponse autre que Null mais pas une réponse en char mais en float !!!
    Si tu sais pourquoi merçi de m'informer

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Ton programme marche on dirait (j'ai fait un essai rapide) ?

    Quel est ton problème est strtod ? As-tu regardé les liens que je t'ai donné ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    896
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 896
    Par défaut
    Citation Envoyé par pythéas Voir le message
    Je ne peux que souscrire à la remarque de Neckara

    Juste au passage, le reste du code mérite aussi un petit coup d'oeil, si tu veux, par exemple que le résultat affiché ne soit pas systématiquement la première valeur entrée en paramétre, il faut penser à modifier la valeur de la variable plusgrand
    oui effectivement j'avais fais une erreur dans la copie du programme :
    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
    33
    34
     
    #include <stdio.h>
    #include <stdlib.h>
    int main (int argc, char *argv[])
    {
      double plusgrand;
      int i;
      char buf[256];
       if (argc<3)  /* argc nombre de paramètres passés au programme */
      {
        printf("pas assez de paramètres\n");
        return -1;
      }  
      plusgrand=atof(argv[1]);
      for (i=2;i<argc;i++)
      {
        printf("Valeur de argv i-1 = %s\n", argv[i-1]);
        printf("valeur de atof i-1 = %f\n", atof(argv[i-1]));
        printf("Valeur de argv i = %s\n", argv[i]);
        printf("valeur de atof i = %f\n", atof(argv[i]));
        if (atof(argv[i])>atof(argv[i-1]))
          {
            plusgrand=atof(argv[i]);
            sprintf(buf, "%f",plusgrand);
            printf("i>i-1...plusgrand est %s\n",buf);
          }
      }
      printf("Le plus grand est %f\n", plusgrand);
      sprintf(buf, "%f",plusgrand);
      printf("Le + grand est %s\n",buf);
      sprintf(buf, "%s",prenom);  
      printf ("prenom = : %s\n", buf);
      return 0;
    }
    Merçi pour ta réponse

Discussions similaires

  1. Convertir un double ou float en *char
    Par Nono Sto dans le forum Langage
    Réponses: 7
    Dernier message: 12/04/2010, 09h18
  2. Cast float to char
    Par Celelibi dans le forum C++
    Réponses: 6
    Dernier message: 28/03/2009, 19h37
  3. Transformer 4 unsigned char en 1 double
    Par fxaguessy dans le forum SL & STL
    Réponses: 8
    Dernier message: 13/01/2009, 20h50
  4. Conversion Float vers char[4]
    Par Argol_Medusa dans le forum C++
    Réponses: 16
    Dernier message: 02/05/2008, 15h15
  5. Transformer un champ CHAR en décimal
    Par ALLB dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 19/07/2004, 13h59

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