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 :

utilisation de set locale


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 26
    Par défaut utilisation de set locale
    Bonjour a tous,

    mon programme doit récupérer des nombres contenus dans un fichier, mais je me suis aperçu que pour lui le . ne passait pas, il lui faut une , pour prendre les décimales. On m'a dit d'utiliser setlocale pour modifier LC_NUMERIC, mais quelle valeur dois je lui donner? On m'a aussi dit qu'il serait bien que je remette LC_NUMERIC a sa valeur de départ a la fin du prgramme, mais comment récupérer cette valeur?

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Par défaut
    setlocale - fixe la localisation courante.

    Pour t 'en servir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <locale.h>
     
    char *setlocale (int categorie, const char * locale);
    Dans ton cas, si j ai compris tu veux mettre une virgule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setlocale(LC_NUMERIQUE,",");
    //a confirmer car ca me semble bizarre...
    Pour ta valeur de depart tape :
    locale dans un shell ..

    voili ++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 26
    Par défaut
    Non, en fait sans changement, mon programme prend des , comme séparateur pour les décimales, je voudrais que ça devienne le .

    Et je bosse sous windows, quand je parlais de récupérer la valeur de la variable, c'était à l'intérieur du programme pour pouvoir la remettre a sa valeur d'origine sans intervention de l'utilisateur.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: utilisation de set locale
    Citation Envoyé par ColonelHati
    Bonjour a tous,

    mon programme doit récupérer des nombres contenus dans un fichier, mais je me suis aperçu que pour lui le . ne passait pas, il lui faut une , pour prendre les décimales. On m'a dit d'utiliser setlocale pour modifier LC_NUMERIC, mais quelle valeur dois je lui donner? On m'a aussi dit qu'il serait bien que je remette LC_NUMERIC a sa valeur de départ a la fin du prgramme, mais comment récupérer cette valeur?

    Merci d'avance
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <locale.h>
    #include <string.h>
     
    char *str_dup (char const *const s)
    {
       char *sdup = NULL;
       if (s != NULL)
       {
          size_t sz = strlen (s) + 1;
          sdup = malloc (sz);
          if (sdup != NULL)
          {
             memcpy (sdup, s, sz);
          }
       }
       return sdup;
    }
     
    int main (void)
    {
       char sa[] = "123.456";
       char sb[] = "123,456";
     
       double va;
       double vb;
     
       va = strtod (sa, NULL);
       printf ("va=%.3f\n", va);
       vb = strtod (sb, NULL);
       printf ("vb=%.3f\n", vb);
       printf ("\n");
     
     
       {
          char *old = str_dup (setlocale (LC_ALL, NULL));
     
          printf ("old='%s'\n", old);
     
          if (old != NULL)
          {
             setlocale (LC_ALL, "FR");
     
          }
          va = strtod (sa, NULL);
          printf ("va=%.3f\n", va);
          vb = strtod (sb, NULL);
          printf ("vb=%.3f\n", vb);
          printf ("\n");
     
          setlocale (LC_ALL, old);
     
          free (old), old = NULL;
       }
     
       va = strtod (sa, NULL);
       printf ("va=%.3f\n", va);
       vb = strtod (sb, NULL);
       printf ("vb=%.3f\n", vb);
       printf ("\n");
     
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    va=123.456
    vb=123.000
     
    old='C'
    va=123,000
    vb=123,456
     
    va=123.456
    vb=123.000
    Par défaut, sur ma machine (Windows 98/Dev-C++), le point est reconnu. En passant en "FR", c'est la virgule qui est reconnue.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 26
    Par défaut
    Moi aussi par défaut le . est reconnu, mais la je me suis mis au GTK et apparemment ça modifie la variable et ça la met en FR. Je vais essayer de la mettre a C et je vais voir si ça fonctionne.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 26
    Par défaut
    c'est bon en mettant la variable a "C" ca fonctionne.

    Merci

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Emmanuel >> Je rêve ou tu as oublié de libérer "old" dans ton code : : :
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Trap D
    Emmanuel >> Je rêve ou tu as oublié de libérer "old" dans ton code : : :
    Non tu ne rêves pas!
    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
     
    SYSALLOC Overload (21 rec)
    SYSALLOC Successful initialization: 21 records available
    va=123.456
    vb=123.000
     
    old='C'
    va=123,000
    vb=123,456
     
    va=123.456
    vb=123.000
     
    SYSALLOC min=4294967295 max=4294967295 delta=0
    SYSALLOC Err: Not-matched list:
    SYSALLOC Bloc 00860620 (2 byte) malloc'ed at line 24 of 'main.c' not freed
    SYSALLOC Released Memory
    Appuyez sur une touche pour continuer . . .
    Corrigé.
    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
     
    SYSALLOC Overload (21 rec)
    SYSALLOC Successful initialization: 21 records available
    va=123.456
    vb=123.000
     
    old='C'
    va=123,000
    vb=123,456
     
    va=123.456
    vb=123.000
     
    SYSALLOC min=4294967295 max=4294967295 delta=0
    SYSALLOC All-matched
    SYSALLOC Released Memory
    Appuyez sur une touche pour continuer . . .

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

Discussions similaires

  1. Erreur à l'utilisation de PERL pour Solaris (perl: warning: Setting locale failed.)
    Par arnaudperfect dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 13/10/2010, 17h08
  2. Réponses: 14
    Dernier message: 21/07/2006, 14h43
  3. Utilisation des sets
    Par Original Prankster dans le forum SL & STL
    Réponses: 6
    Dernier message: 08/02/2006, 21h28
  4. utiliser les set en C++
    Par yaskiki dans le forum C++
    Réponses: 2
    Dernier message: 05/10/2005, 16h04
  5. [Applet] Utilisation sur poste local
    Par stoj dans le forum Applets
    Réponses: 1
    Dernier message: 21/09/2005, 11h58

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