[C con Clase] Más de signos de puntuación

Manuel L. notret en gmx.es
Mar Dic 14 16:58:56 CET 2010


Hola, Jagse:

j> ...
j> Si al SO desde la Shell le envio la siguiente instrucción:  locale
j> Me devuelve :
j> LANG=spanish_spain.8859
j> LC_COLLATE= spanis_spain.8859
j> LC_TIME= spanis_spain.8859
j> LC_NUMERIC= spanis_spain.8859
j> LC_MONETARY= spanis_spain.8859
j> LC_MESSAGES= spanis_spain.8859
j> LC_ALL=
j> ...
j> Introduzco este programa en C:
j> ...
j>       printf("Localidad \"%s\"\n",setlocale(LC_ALL,""));
j> ...
j> Y las respuestas obtenidas son:
j> ...
j> Con Puntuación anterior: 102345.33
j> ...
j> Con Puntuación nueva: 102345.33
j> ...
j> ¿Dónde me equivoco?
j> ...

Supongo que los valores en las variables de entorno serán del tipo *spanish* y no *spanis*. De todas formas creo que su problema está en la configuración local. Cuando se invoca a la función setlocale con locale  = "" el comportamiento no es estándar, por lo que no puedo saber cuál es su problema, pero si usa glibc, lo cual sería de esperar, setlocale primero se intenta deducir las preferencias de la variable LC_ALL. Si no estuviese definida (no es su caso) leería las LC_* concretas y si no estuviesen definidas LANG. Si alguna de las variables no estuviese bien definida la llamada no tiene efectos. Ése sería su caso, ya que en su entorno LC_ALL="" y "" no es una codificación conocida.

He probado su programa y funciona perfectamente con las variables de entorno bien configuradas.

Fuente: página de manual de setlocale.

Atentamente, Manuel L.


Más información sobre la lista de distribución Cconclase