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 :

[Debutant] Problème avec tableau et atof


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 29
    Points : 18
    Points
    18
    Par défaut [Debutant] Problème avec tableau et atof
    Bonjour à tous,


    je programme actuellement un PIC 18f4520 avec le compilateur CCS.

    Je souhaiterai convertir un char qui se trouve à un endroit précis d'un tableau (ex: string[4] = '7') et convertir le '7' en float (7.00).

    Le manuel de CCS propose bien un atof avec cette synthaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <stdlib>.h
     
    char string[10];
    float x;
     
    strcpy(string,"123.456");
    x = atof(string);

    voici mon 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
     
    #include <18F4520.h>
    #include <stdlib.h>
    #include <inputc.c>
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #use delay(clock=40000000)
    #use rs232(baud=9600,  parity=N, xmit=PIN_C6, rcv=PIN_C7, stream=PORT1, bits=8,)
     
    float x=1;                       // 1 par défaut
    float total;
     
    #define STRING_SIZE 40
     
    void main(void);
       {
       while(1)
          {
          get_string(reception, STRING_SIZE-1);
     
          if (reception[0]=='O')
             {
             total = (5*x);
             printf("%f", total);
             }
          else if (reception[0]=='x')
             {
             x=atof(reception[1]); //on change la valeur de x pour afficher un resultat different ci-dessus. supposons que reception[1] = '7'.
             }
          }
       }

    Ca compile sans problème. Après avoir lancé le programme, et envoyé depuis mon PC (rs232) la chaine "x7", la fenetre qui m'affiche les valeurs des variables m'indique que x reste toujours égale à 1. Je comprend pas.

    Quelqun pourrait m'expliquer comment faire svp ?


    Merci bien, en espèrant que ma problèmatique est clair :s

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Points : 538
    Points
    538
    Par défaut
    la fenetre qui m'affiche les valeurs des variables m'indique que x reste toujours égale à 1
    as-tu vérifié si le programme rentrait bien dans ton else if? Si oui, as-tu vérifié la valur de ta string à la sortie de get_string?
    "L'insanité consiste à répéter la même action dans l'espoir d'aboutir à un résultat différent" Albert Einstein
    ----------------------
    T.O.A.O 6-MarViN

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Oui la fenêtre Watch de Mplab m'indique reception[0]='x' et reception[1]='7'.
    De plus j'ai déjà utilisé un Breakpoint sur x=atof(reception[1]); et s'était arrêté dessus. Il rentre donc bien dans else if.

  4. #4
    Membre éprouvé
    Avatar de f-k-z
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2006
    Messages : 403
    Points : 928
    Points
    928
    Par défaut
    Yoyop,

    atof fait appel à une chaine de caractere et non pas un seul caractere...
    donc si recption à une longueur de 40, atof va te prendre la chaine commençant à reception[1] jusqu'au premier '\0' ou reception[39].
    Faudrait voir à avoir un code du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    x=(float)reception[1]-48;
    ++

    Fiki
    GNU/Linux c'est une question de VI ou de MORE.
    http://www.goodbye-microsoft.com
    "Linux is user friendly, its just very selective of its friends*", m'enfou, je suis son pote :p

    Un post vous est utile ou est constructif, ayez le réflexe du +1 pour le contributeur ( C'est gratuit et ça donne l'impression d'être utile :p )
    Le tag et la ne sont pas fait que pour le décor, pensez-y !
    R.I.P. F-k-z 13/06/2006 - 12/10/2011
    *Linux est convivial, il est juste très sélectifs pour ses amis.

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Heu en fait c'est bon j'ai corrigé le problème^^'


    il fallait mettre tout bêtement un "&" devant reception[1]


    Merci quand même Marvin, et désolé du dérangement^^'

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Oui exact f-k-z, c'est ce que je viens de remarquer.


    En ce qui me concerne ça ne pose pas de problème pour mon programme mais j'te remercie quand même du tuyau

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

Discussions similaires

  1. [DEBUTANT] Probléme avec l'héritage
    Par BRAUKRIS dans le forum Langage
    Réponses: 7
    Dernier message: 16/09/2005, 20h22
  2. [Debutant] Problème avec des membres static
    Par Mathieu.J dans le forum Débuter
    Réponses: 4
    Dernier message: 24/08/2005, 17h09
  3. [debutant]Problème avec une requete ....
    Par MichMich29 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 27/07/2005, 17h19
  4. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08

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