-
localisation de scanf
Bonjour
J'utilise sscanf pour lire un float :
Code:
ii=sscanf(node->attributs[i].value,"%f",&sortie);
Sous mon Linux, si j'ai 0.1234, il lit 0 ! alors que si j'ai 0,1234, il va lire 0 virgule 1234 , le nombre recherché.
Par contre le même programme sous windows comprendra bien le 0.1234 et pas l'autre.
En gros, sous Linux, la localisation du système est prise en compte alors qu'elle ne l'est pas sous Windows. Comme je défriche un fichier où le format est le format anglais, j'aimerai bien savoir s'il est possible de forcer le formatage : le séparateur décimal doit être le point, pas la virgule !
-
Bonjour,
Tu as essayé la fonction setlocale()?
la catégorie LC_NUMERIC est sensée s'occuper de ça je crois..
-
Une recherche sur internet avec tes commentaires ( http://www.developpez.net/forums/d11...-lc_numeric-c/ ) m'a donné la solution :
Code:
setlocale(LC_NUMERIC,"C");
Mais, c'est quoi ce "C" ? Comment savoir qu'on a ce choix ?
nb : testé sous Linux et sous windows.
-
Je viens de faire un petit test, bon par défaut je suis en anglais mais je peut passer au format français (avec virgule).
Donc, un simple
Code:
setlocale(LC_NUMERIC, "English");
devrait fonctionner.
Edit : pardon j'avais pas vu ton post, ben le "C", je connaissais pas, peut être un choix par défaut, je vais regarder sur le net à mon tour ;)
Edit2 : Effectivement, comme l'a confirmé leternel, c'est un choix par défaut, je connaissais "" mais une expression explicite est surement préférable
-
Il y a plusieurs arguments possibles:
- "C" la locale C standard
- "" la locale system
- d'autres selon les systèmes
Souvent, mais pas toujours, "" est équivalente à "C"