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 :

Conversion des variables (langage C)


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 74
    Par défaut Conversion des variables (langage C)
    Bonjour à tous et à toutes
    j'aimerai bien convertir un tableau de type char en un variable de type float et un autre de type char.
    voici un extrait du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char code[8];
    char aide;
    float calcul;
    /////
    aide=*(&tab[0]);
    calcul=*(&tab[0]);
    le probléme c'est que lorsque j'affiche le contenu de ces variables, je constate que l'information est complètement perdue!!!!
    quelqu'un peut m'aider
    merci d'avance

  2. #2
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    salut,

    que cherches-tu à faire ? parser une chaine pour en extraire un float ? et dans l'autre cas, que veux-tu faire en assignant une chaine à un char ?

  3. #3
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 183
    Par défaut
    Comment veux tu convertir un char en float ? est ce que tu parles de la surcharge comme en c++ ? tu dois donner plus de détails sur ce que tu veux faire

  4. #4
    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
    Effectivement ce que tu souhaites faire n'est pas très clair, essaye d'être un peu plus explicite.
    En attendant tu devrais jeter un œil à la fonction atof

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    J'ai lu le man de atof, et je vois quelque chose qui me choque

    atof() ne détecte pas d'erreur
    Je trouve cela risqué non?

    Mais heureusement, le man d' atof, nous amène à une autre fonction qui elle détecte l'erreur, strtod.

    Y a-t-il une raison souhaitable à choisir atof, plutôt que strtod?

  6. #6
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Salut,

    tu as raison , il est beaucoup plus robuste d'utiliser strtod car tu peux vérifier que la chaine ne contenait qu'un réel valide et dans le cas contraire traiter l'erreur ou continuer sur un traitement approprié.
    Cela dépend fortement de la confiance que tu accordes au fichier lu, et à la profondeur du traitement de l'erreur que tu désires faire. Ensuite ton rayon d'action est large :

    • lire uniquement ce que tu t'attends à trouver
      la gestion des erreurs se limitant au minimum : soit le fichier est valide et tu le traites ou tu quittes l'appli
      Ex: Le fichier provient d'un appli et son format est toujours strictement respecté.
    • lire une chaine, la tokeniser,vérifier la cohérence avec le format attendu
      la profondeur de la gestion est libre, mais si elle est poussée il vaudra mieux se diriger vers un autre solution.
      Ex : Une entrée d'utilisateur
    • lire un fichier binaire qui correspond exactement à une structure
      le fichier n'est pas très human readable en général
      te lie fortement à un format plus ou moins fixe
    • utiliser un format plus ou moins standard pour lequel tu as des fonctions d'accès/bibliothèques : csv, xml, ...
      OK le boulot est fait par un tiers, mais qui en général est bien testé
      Te permet de choisir la bibliothèque la mieux adaptée suivant tes besoins (lire un xml soit via SAX soit via DOM par exemple).
    • créer ton parser pour un format particulier
      un peu comme le cas d'avant sauf que tu définis finement ton format, ou tu récupères des grammaires existantes.
      Te permet de faire une gestion très fine des erreurs, d'être flexible sur les récupérations, etc, mais en général ça fait du boulot (au moins en apprentissage)

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Merci pour les explications

    En effet, si cette fonction (atof) est présente, c'est qu'il y a une raison.

    La demande du PO devrait être plus claire en ce qui concerne la provenance de cette chaîne.

  8. #8
    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
    Mon avis est qu'il ne faut pas utiliser les fonctions de la famille d'atof (atoi, atol...) puisque la vérification d'erreur ne peut pas être faite (sauf si les nombres attendus ne peuvent pas être nuls).

    Il est toujours préférable d'utiliser les fonctions de la famille strtol (stroul, strtoll) puisqu'elles permettent la vérification d'une erreur. On peut même savoir assez finement si l'erreur vient d'une chaine invalide, d'un dépassement de format supérieur ou inférieur, ... Ces fonctions permettent aussi de choisir la base dans laquelle la chaine représente le nombre.

    Si on a confiance (ou qu'une conversion erronée n'a pas d'effet suffisamment important pour s'embêter), on peut utiliser strtol() avec NULL en 2e argument. Voir la section DESCRIPTION de la page de manuel : http://man.developpez.com/man3/atoi.3.php

  9. #9
    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
    Effectivement strtod est plus fiable grâce à sa détection d'erreur, encore qu'il m'est arrivé d'utiliser atox pour de grosses applications pour lesquelles la gestion des erreurs devait être transparante pour l'utilisateur final (et dans la mesure où 0 ne pouvait pas être une valeur valide), d'autant que strtod est sensée être plus lente (car nécéssitant l'allocation de plusieurs variables supplémentaires) même si je ne me suis jamais amusé à faire des tests.

    Si j'ai évoqué atof, c'est surtout parce que compte tenu du caractère confus de la question j'ai pensé que le PO devait être assez débutant et qu'il me semble plus naturel de s'intéresser d'abord à une fonction toute simple comme atof, après c'est sûr qu'on peut considérer qu'il est préférable de prendre tout de suite de bonnes habitudes...

Discussions similaires

  1. souci de conversion des types variables
    Par halil.zakaria dans le forum C++
    Réponses: 11
    Dernier message: 04/02/2013, 00h39
  2. Réponses: 35
    Dernier message: 14/11/2008, 15h30
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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