Foros del Web » Programación para mayores de 30 ;) » Programación General »

Caracteres especiales en C++

Estas en el tema de Caracteres especiales en C++ en el foro de Programación General en Foros del Web. ¿Cómo puedo mostrar por pantalla caracteres especiales (como á, é, ü, etc.) en un programa de consola en C++? Saludos y gracias...
  #1 (permalink)  
Antiguo 04/06/2003, 07:03
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Caracteres especiales en C++

¿Cómo puedo mostrar por pantalla caracteres especiales (como á, é, ü, etc.) en un programa de consola en C++?
Saludos y gracias
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #2 (permalink)  
Antiguo 04/06/2003, 10:01
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Depende de tu compilador, si compilas desde Windows, averigua el código ASCII para cada uno de ellos (existen tablas) y manda imprimir con:

printf("%c", 126); //en teoría debe pintar la tilde (~)

si es desde compilador de DOS, escribelos tal cual.

Eso se debe a que Windows se basa en ANSI, y DOS en ASCII, por lo que muchos códigos cambian.

Saludos
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 04/06/2003, 13:39
Avatar de xavivars  
Fecha de Ingreso: enero-2002
Ubicación: Benissa - la Marina Alta
Mensajes: 212
Antigüedad: 22 años, 3 meses
Puntos: 1
Y si utilizas Linux, cuando hagas un cout << , los caracteres que le indiques son los q saca.
  #4 (permalink)  
Antiguo 04/06/2003, 14:14
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Muy cierto, olvidé la opción de Linux, bien por xavivars

Saludos
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 04/06/2003, 14:17
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Bueno, os comento que es bajo windows, el programa que uso es el Dev C++ 4
¿Entonces como debería escribir, p. ej., la palabra "avión"?

cout << "avi";
printf("%c", xxx); <---- Poner ahí el código de ó
cout << "n";

¿Así o de otra forma?

Saludos y gracias
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #6 (permalink)  
Antiguo 04/06/2003, 15:19
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Si, la otra es que investigues el valor ASCII de "¨®", suponiendo que sea 123 lo puedes hacer es escribir "avi [alt]+123 n" ( "[]" significa tecla).

No importa que caracter veas en windows (puede ser ¨g) en DOS ser¨¢ la "¨®", eso es m¨¢s sencillo.

Saludos
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #7 (permalink)  
Antiguo 04/06/2003, 15:32
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Oye, pues no lo consigo. ¿Me podrías adaptar esta línea?

cout << "avión";

¿Cómo sería? La ó es el ASCII número 162

Saludos y gracias
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #8 (permalink)  
Antiguo 04/06/2003, 15:48
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Se me hace que lo estas haciendo desde el cmd de Windows.

"ó" es el 162 pero de ANSI.

en MSDOS debe ser otro código. En internet lo he encontrado como el ASCII 211 (para ó) y ASCII 179 (para Ó).

cout << "avi [alt]+211 n";

lo que te queda en windows:

cout << "avi╙n";

No hay problema, en DOS deberá verse bien.

Saludos
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche

Última edición por Mithrandir; 04/06/2003 a las 15:57
  #9 (permalink)  
Antiguo 04/06/2003, 15:56
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
El problema es que en vez de mostrarme ó me muestra algún caracter raro (si pongo cout << "avión"; ) o [alt]+162 si ponco cout << "avi" << [alt]+162 << "n"; o bien cout << "avi[alt]+162n";

Yo estoy escribirendo el codigo bajo DevC++ 4, pero con la versión 5 también me pasa (al compilar y ejecutar bajo el ms-dos del windows me muestra lo que antes dije). Y la función printf me da error.

¿No hay manera?
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #10 (permalink)  
Antiguo 04/06/2003, 16:07
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Cita:
El problema es que en vez de mostrarme ¨® me muestra alg¨²n caracter raro (si pongo cout << "avi¨®n"; ) o [alt]+162 si ponco cout << "avi" << [alt]+162 << "n"; o bien cout << "avi[alt]+162n";
Si lo quisieras hacer es:

cout << "avi" << [alt]+162 << "n";

lo harías también:

cout << "avi" << 211 << "n";

creo que sería más claro, pero te recomendo mejor usar:

cout << "avi╙n";

Recuerda que no es 162, sino 211.

Saludos
  #11 (permalink)  
Antiguo 04/06/2003, 16:14
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Bueno, vamos a volver atrás:

cout << "avión";
Eso muestra avi3/4n (3/4 como un único carácter)

cout << "avi [alt]+211 n";
Eso muestra avi [alt]+211 n tal cual

cout << "avi" << [alt]+211 << "n";
Error de compilación.

cout << "avi" << 211 << "n";
Eso muestra avi211n tal cual.

cout << "avi";
printf("%c",211);
cout << "n";

Error de compilación.

¿Qué puede ser?
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #12 (permalink)  
Antiguo 04/06/2003, 16:19
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
OK, recapitulando:

cuando me refiero a [alt]+algo no significa literalmente, sino que presiones la tecla ALT mas lo que venga después, en este caso el 211 y despues sueltes ALT.

debe funcionar escibiendo:

cout << "avi [alt]+211 n", o sea que cuando termines de teclear veras algo como:

cout << "avi╙n"; //asi lo veras en windows, no importa

pero en DOS ver¨¢s:

count << "avión"; //asi lo veras en DOS, que es lo que importa

eso es todo.

Saludos

Última edición por Mithrandir; 04/06/2003 a las 16:22
  #13 (permalink)  
Antiguo 04/06/2003, 16:28
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Ok, ya te entendí. Pone el símbolo Ë pero luego no muestra la ó...
Mañana veré tu respuesta, hoy ya estoy cansado.
Saludos
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #14 (permalink)  
Antiguo 04/06/2003, 17:08
Avatar de Max13  
Fecha de Ingreso: octubre-2000
Ubicación: Mx
Mensajes: 1.229
Antigüedad: 23 años, 6 meses
Puntos: 0
Mmmmmmmmmm y que te parece si
pones:

cout<<"Avi\ón";

Igual y si-da.
  #15 (permalink)  
Antiguo 05/06/2003, 02:04
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Pues no va... Dice que después de \ tiene que venir un char (y ó no es char)
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #16 (permalink)  
Antiguo 05/06/2003, 06:33
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Creo que en C existe la funcion chr() (o char(), ahora no me acuerdo) a la que le pasas el codigo del caracter. No me acuerdo si era el codigo ASCII o el ANSI.

Aun asi, yo creo que el problema no es de tu codigo, si no de windows. Si en el charset de windows no coincide el codigo con el que saca tu codigo, mostrara otro caracter (lo que te pasa ahora). Y windows es tan majo que maneja distintos charset para el entorno grafico y para el modo DOS. Puedes tener configura el entorno grafico con teclado en castellano y abrir una ventana de comandos y tener el teclado en ingles. Esto es porque el msdos se configura en el autoexec y en el config y el entorno grafico tiene otros ficheros de configuracion.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #17 (permalink)  
Antiguo 05/06/2003, 11:08
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
cierto, puedes tener diferentes configuraciones de mapa de caracteres.

Lo de la función char(valorInt) es obligar a hacer el casting de a caracter, lo cual también debe funcionar, pero es lo mismo que printf("%c",valorInt); si solo usas cout lo deberías intentar.

Ahora una pregunta, lo piensas correr en DOS puro (6.22 para atrás) o en los DOS modernos que ya traen soporte de archivos largos (disco de arranque de win98 en adelante, creo)

Los DOS nuevos usan ANSI, no ASCII.

Ayer hice una prueba con codigo ANSI (o acentuada=162) y compilé el código con TurboC (3.1 para DOS) dentro de win2k. Ahí aparecen los valores en ANSI (y al ejecutar todo se imprime bien).

Luego copié el mismo ejecutable a un disco y arranque con el disco de arranque de win98SE, al ejecutarse imprime todo bien (ANSI), lo que indica que DOS de win98Se usa ANSI también, desafortunadamente perdí mis discos de DOS 6.22 y no lo pude ejecutar ahi.

Por lo que llego a la conclusión:

Si usas una versión de DOS nueva (o la incluida con cmd en windows) no deberías tener problemas, codificas en Win, usas ANSI, aunque el compilador sea basado en ASCII.

Si usas el DOS clásico si tienes que preocuparte por usar ASCII.

Esto es al menos en teoría, si no es así dinos que es lo que pasa, si no te pinta la "o con acento" aunque en win ves otra cosa, que ves?

En windows cambia lo que yo veo y tu ves debido al mapa de caracteres que tenemos cargado cada uno, en ASCII debería ser igual.

Saludos
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #18 (permalink)  
Antiguo 05/06/2003, 12:08
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Mira, en principio debe funcionar para Win2000 y WinXP. Yo lo he probado en XP y no hay manera de que salga la ó, siempre sale cualquier otro simbolito. Es desesperante
Saludos
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #19 (permalink)  
Antiguo 05/06/2003, 12:12
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Ahora se que tienes XP, pero sobre qué lo quieres correr?

En la tarde lo checo en mi casa sobre el XP, mañana te aviso, pero de nuevo ¿sobre que lo quieres correr?

Saludos
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #20 (permalink)  
Antiguo 05/06/2003, 12:17
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Pues debería compilar sobre WinXP y correr sobre Win2000 y bajo WinXP.
No se si lo dije, pero uso el DevC++ 4 para compilar.
Saludos
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #21 (permalink)  
Antiguo 05/06/2003, 12:21
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
OK
lo checo y a ver que averiguo.

Saludos
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #22 (permalink)  
Antiguo 05/06/2003, 13:03
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
La verdad que no tenía ni idea de que existieran distintas codificaciones para usar en C++
Es un trabajo fin de asignatura, supongo que mis profes lo corregirán bajo Win2000 que es el sistema que utilizamos en la uni, pero prefiero que también vaya con el XP por si las moscas...
Saludos
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #23 (permalink)  
Antiguo 09/06/2003, 11:07
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Después de hacer varias pruebas y meditación llegué a unas conclusiones. Si solo trabajas con Windows y el CMD del mismo Windows, olvida lo de ANSI y ASCII, todo ahi es ANSI.

Lo que te pasaba es que tienes cargados diferentes charsets dentro de tus windows, por eso en uno es diferente que otro.

Si lo quisieras corregir supongo que tienes que investigar que charset está cargado (mediante APIs), y entonces actuar dependiendo del resultado.

La otra es hacerte el de la vista gorda.

Saludos
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #24 (permalink)  
Antiguo 23/04/2011, 14:23
 
Fecha de Ingreso: abril-2011
Mensajes: 1
Antigüedad: 13 años
Puntos: 2
Respuesta: Caracteres especiales en C++

[QUOTE=ferny;405393]Oye, pues no lo consigo. ¿Me podrías adaptar esta línea?

cout << "Avi\242n";// esta es la forma como lo hago
con mi compilador c++ standar
mira te envio las vocales acentuadas y prueba en tu
compilador

cout << "\240, "//veras la a acentuada
cout << "\202, "// la e acentuada
cout << "\241 "// la í
cout << "\242 "// la ó
cout << "\243 "//la ú
cout << "\244 "//La ñ
cout << "\245" // creo que es la Ѩ
Prueba y me avisas
saludos.

oscar herculano o.
  #25 (permalink)  
Antiguo 01/06/2011, 17:44
 
Fecha de Ingreso: junio-2011
Mensajes: 1
Antigüedad: 12 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Caracteres especiales en C++

@herculanooviedo respondiste a un tema muy viejo, pero lo que escribiste es correcto , a mi me funciono con la version 4.9.9.2 devcpp con windows xp y me muestra lo que decis bos que muestra.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 19:41.