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 :

sscanf avec deux long double


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut sscanf avec deux long double
    Bonjour,
    pour les besoins d'une application j'ai besoin de lire deux long double dans une chaine de caractère.
    Malgrès tous mes efforts et de nombreuses méthodes essayées je n'y suis toujours pas arrivé.

    Voici mon problème et le programme suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        long double x,y;
        char string[]="12455.23325 15215.25";
        if(!sscanf(string,"%Lf %Lf",&x,&y))
            printf("format de donnees incompatible");
        printf("x:%Lf y:%Lf\n",x,y);
        //affiche : x:12455.233250 y:0.000000
        return 0;
    }
    x contient bien la bonne donnée mais pas y.

    J'ai essayer de faire cela avec des double, mais la conversion d'un nombre de type double en long double ne fonctionne pas (à moins qu'il faille utiliser une fonction) ??

    Pouvez vous m'aider ?
    merci
    cdt
    james

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Je ne vois rien -- à part qu'il faudrait comparer le résultat de sscanf à 2 -- et je ne reproduis pas.W
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Je ne vois rien -- à part qu'il faudrait comparer le résultat de sscanf à 2 -- et je ne reproduis pas.W
    Je viens de faire des tests et je reproduit bien ce problème avec un gcc 3.4.5 (mingw-vista special).

    Le plus surprenant c'est que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        printf("x:%Lf\n",x);
        printf("y:%Lf\n",y);
    affiche bien les valeurs correctes pour x et y.

    A priori, c'est à rapprocher de ce problème.

  4. #4
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par gl Voir le message
    Je viens de faire des tests et je reproduit bien ce problème avec un gcc 3.4.5 (mingw-vista special).
    Ce ne serait pas un problème entre gcc qui prend long double pour un format 80 bits et la lib c de MS (utilisée par mingw) pour un format 64 bits?
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    merci bcp pour vos réponses.
    je peux donc conclure que le problème vient du printf et du faite que j'utilise windows (7 64bits) mais que le sscanf fonctionne bien ?
    (bug situé uniquement au niveau de l'affichage)

    sinon j'ai essayé de faire :
    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
     
    int main()
    {
        long double x,y,z;
        char string[]="12455.23325 15215.25";
        if(sscanf(string,"%Lf %Lf",&x,&y)!=2)
            printf("format de donnees incompatible");
        printf("x:%Lf\n",x);
        printf("y:%Lf\n",y);
     
        z=15215.25;
        if(y==z)
            printf("ok\n"); 
        return 0;
    /*affichage :
    x:12455.233250
    y:15215.250000
    */
    }
    mais le message "ok" ne s'affiche pas , ne peut pas comparer des long double ??

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Ce ne serait pas un problème entre gcc qui prend long double pour un format 80 bits et la lib c de MS (utilisée par mingw) pour un format 64 bits?
    Possible.

    Citation Envoyé par jamesdgb Voir le message
    mais le message "ok" ne s'affiche pas , ne peut pas comparer des long double ??
    Essaie d'imprimer z, tu risque d'être surpris. J'obtiens z:-409482024012691540000000000000000000000...

    A moins d'avoir loupé un truc énorme, j'ai l'impression que la cohabitation de gcc (au moins dans la version 3.4.5) et la libc microsoft n'est pas terrible au niveau du support des long double.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    ok,
    je ne m'y connais pas vraiment, gcc me dit vaguement quelque chose, c'est bien le compilateur ? si je dois le changer lequel prendre?
    si je souhaite rester sur windows et avoir un programme avec des long double que dois-je faire ?

  8. #8
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par jamesdgb Voir le message
    je ne m'y connais pas vraiment, gcc me dit vaguement quelque chose, c'est bien le compilateur ?
    Qu'utilises-tu pour l'instant ?

    Citation Envoyé par jamesdgb Voir le message
    si je souhaite rester sur windows et avoir un programme avec des long double que dois-je faire ?
    Essaies Visual C++ dont la version Express est librement téléchargeable.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    J'utilise Codeblocks
    je vais essayer visual C++
    merci je vous tiens au courant pour vous dire si ça a marché.

  10. #10
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Salut.

    Citation Envoyé par jamesdgb Voir le message
    si je dois le changer lequel prendre?
    Bah, tu peut essayer avec Visual C++ sous Windows si tu n'as pas d'autres solutions ...

    Edit : devancé

    Citation Envoyé par jamesdgb Voir le message
    J'ai essayer de faire cela avec des double, mais la conversion d'un nombre de type double en long double ne fonctionne pas (à moins qu'il faille utiliser une fonction)
    Ce code à l'aire de fonctionner chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
     
    int main(void)
    {
        double x,y;
        long double x2,y2;
        char string[]="12455.23325 15215.25";
        sscanf(string,"%lf %lf",&x,&y);
        x2=(long double)x; /* l'affectation directe avec absence de cast fonctionne aussi chez moi d'ailleurs */
        y2=(long double)y;
        printf("x:%Lf y:%Lf\n",x2,y2);
        return 0;
    }
    Cordialement,
    Idriss

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Sur Visual C++ cela marche bien
    mais je n'aime vraiment pas le logciel de microsoft,
    y a t-il un moyen de faire fonctionner le programme avec codeblocks ?

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Idriss :
    merci mais j'ai bien évidemment essayer cela,
    voila ce que j'obtiens au niveau de l'affichage
    x:-7953042481610.000000 y:0.000000

  13. #13
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Citation Envoyé par jamesdgb Voir le message
    y a t-il un moyen de faire fonctionner le programme avec codeblocks ?
    Normalement, il est possible de faire fonctionner C::B avec le compilo de visual : vas voir dans setting => compiler and debugger ...

    Citation Envoyé par jamesdgb Voir le message
    Idriss :
    merci mais j'ai bien évidemment essayer cela,
    voila ce que j'obtiens au niveau de l'affichage
    x:-7953042481610.000000 y:0.000000
    Pas de bol

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    merci
    effectivement cela est possible et cela fonctionne
    (en mettant le compilateur de ms sur codeblocks)

    merci àtous !

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

Discussions similaires

  1. Plantage avec utilisation de long double
    Par thebop dans le forum Débuter
    Réponses: 9
    Dernier message: 17/06/2009, 11h39
  2. Double avec deux chiffres après la virgule
    Par Viscapon dans le forum Débuter avec Java
    Réponses: 32
    Dernier message: 14/02/2009, 17h50
  3. Réponses: 1
    Dernier message: 21/04/2008, 16h00
  4. Réponses: 5
    Dernier message: 11/05/2006, 08h51
  5. Réponses: 4
    Dernier message: 12/09/2003, 11h38

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