Usuario: anónimo

Usuarios en línea: 1
Invitados: 1

FAQ

Mensaje

2052m
Re: la eñe en programas de consola
C(Salvador Pozo) 2004-05-28 04:58:14  H

Estimado jmicanovelles,

Con fecha jueves, 27 de mayo de 2004, 20:43:15, escribió:

Hola:

j>  No se si a todos os ocurre lo mismo, pero al introducir literales

j>  en algun programa de consola, aparece otro signo. Un día hice un

j>  comentario al enviar alguno de los ejercicios a c.conclase.net y

j>  Salvador me dijo que no ocurría nada raro con la eñe, pero a mi si

j>  me ocurre, al compilar el programa.

Creo que no entendí tu pregunta correctamente. Me preguntabas en ese

mensaje que "qué pasaba con los acentos", y yo entendí que era al leer

los datos, no al mostrar los mensajes en pantalla. Siento el

malentendido.

Efectivamente, cuando se programa en Windows para consola, los

acentos, y las eñes, no salen correctamente. Esto es porque la consola

usa un juego de caracteres diferente que el resto de Windows (ignoro

el motivo, y si se puede configurar de otro modo, todos mis intentos

en ese sentido han fracasado).

Hay dos posibilidades para solucionar esto:

1) Usar un editor de consola para editar el fichero fuente. (Como el

EDIT de MS-DOS).

2) Usar funciones del API para "traducir" las cadenas con acentos al

conjunto de caracteres de consola:

Hay que recordar que los programas de consola siguen siendo programas

Windows, y por lo tanto pueden acceder al API. Windows usa un juego de

caracteres por defecto para la consola de 8 bits, los primeros, del 32

al 127 son siempre los mismos: el código ASCII de 7 bits. El resto

depende de la página de códigos que esté activada, por defecto se

activa una que no dispone de caracteres acentuados ni ñ.

Podríamos usar un juego de caracteres de 16 bits, pero no es

necesario, bastará con usar una función del API para conversión de

cadenas entre el código ANSI y el OEM: CharToOem

Veamos un ejemplo:

----8<------

#include <iostream>

#include <windows.h>

using namespace std;

int main()

{

   char cad[25];

   cout << "áéíóú" << endl;

   CharToOem("áéíóú", cad);

   cout << cad << endl;

   cin.get();

   return 0;

}

----8<------

Por supuesto, esto nos obliga a almacenar en variables todas las

cadenas de nuestro programa y a convertirlas antes de usarlas, pero

nos asegura que siempre obtendremos el mismo resultado.

j>  Si declaro una variable con el código ascii 164, creo que es,

j>  entonces si me aparece.

Es otra opción, pero de momento no dispongo de soluciones generales.

j>          Cuando uso el API, entonces si aparece.

En ese caso, tanto el editor de Dev-C++ como el programa que creas son

aplicaciones GUI, y por lo tanto, usan el mismo conjunto de

caracteres.

Hasta pronto.

--

Saludos,

Salvador  mailto:salvador@conclase.net

Con Clase:  http://www.conclase.net

====================================================================<<<

Whatever you Wanadoo, click below

This email has been checked for most known viruses – find out more here

http://ads.smartgroups.com/adclick/CID=00000093c79a99a500000000

====================================================================>>>

If you want to share pictures, use the calendar, or start a questionnaire

visit http://www.es.smartgroups.com/groups/c-con-clase

To leave the group, email: c-con-clase-unsubscribe@smartgroups.com