Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: cesariox23 en 24 Mayo 2014, 16:09 pm



Título: Representación hexadecimal de las vocales con acento
Publicado por: cesariox23 en 24 Mayo 2014, 16:09 pm
Estimados señores: Soy un estudiante autodidacta y de nivel principiante del lenguaje C, siempre que he querido mostrar acentos en mis textos lo he hecho de la siguiente manera:
printf("\nN%cmero de cuenta: ", 163);

Tenía entendido que también se podía colocar el valor hexadecimal de caracter insertándolo en el mismo texto de la siguiente manera:
printf("\nN\xA3mero de cuenta: ");

Así lo hice y escribí un programa en donde usé varias veces los valores hexadecimales para mostrar correctamente las letras con acentos y al momento de compilar me sale el siguiente mensaje:

warning: secuencia de escape hexadeximal fuera de rango (enabled by default)

En el programa que estaba escribiendo tenía como 5 líneas de código con instrucciones printf que usaban estos valores y me salió 5 veces el mensaje arriba expuesto. La tabla que estoy usando es esta:

á: \xA0
é: \x82
í: \xA1
ó: \xA2
ú: \xA3

El programa compiló igualmente y al momento de ejecutarlo en donde se supone que debería estar una letra con acento solo hay una línea, algo asi como "N-mero de cuenta: ".

Estoy haciendo algo mal? O se requiere algún archivo de cabecera extra? (Hasta ahora solo he usado el stdio.h) De antemano les agradezco cualquier ayuda que puedan brindarme, ah y por cierto, mi entorno donde programo es este:

Compilador: gcc 4.8.1-4 (MinGW - www.mingw.org)
IDE: Codeblocks svn 9677 (Nightly)
S.O: Windows XP SP3


Título: Re: Representación hexadecimal de las vocales con acento
Publicado por: leosansan en 24 Mayo 2014, 19:44 pm
Por lo que tengo entendido al usar esas secuencias de escape la siguiente letra a dicha secuencia no puede ser un dígito numérico ni letra de la a a la f o el compilador la tomará como parte del hexadecimal y dará el warning que comentas.

Es decir si quieres escribir "tenía"=ten\xA1a como lo que sigue a xA1 es una a se tomará como parte del hexadecimal imprimiendo por ello un caracter no esperado y lanzando el consiguiente warning.


¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Representación hexadecimal de las vocales con acento
Publicado por: JoelGonzalez en 28 Mayo 2014, 02:08 am
Una posible solución a tu problema sería utilizar la secuencia de escape octal, que al igual que la secuencia hexadecimal, te permite imprimir carácteres del ascii extendido en la función printf de esta manera:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.   printf("\n**Vocales acentuadas**\n");
  6.   printf("\n \265rbol - \265rbol");
  7.   printf("\n Empec\220 - empec\202");
  8.   printf("\n Decid\326 - decid\241");
  9.   printf("\n Comunicaci\340n - comunicaci\242n");
  10.   printf("\n \351til - \243til\n");
  11.  
  12.   printf("\n**Simbolos especiales del espa\244ol**\n");
  13.   printf("\n \245o\244o");
  14.   printf("\n \250D\242nde estoy?");
  15.   printf("\n \255Ven aqu\241!");
  16.   printf("\n Creo ver un ping\201ino");
  17.  
  18.   return 0;
  19. }
  20.  

El resultado de este código tendría que ser:

Código:

**Vocales acentuadas**

 Árbol - árbol
 EmpecÉ - empecé
 DecidÍ -decidí
 CominucaciÓn - comunicación
 Útil - útil

**Simbolos especiales del español**

 Ñoño
 ¿Dónde estoy?
 ¡Ven aquí!
 Creo ver un pingüino


Espero haberte ayudado y también espero que sigas aprendiendo más de este interesante lenguaje de programación.


Título: Re: Representación hexadecimal de las vocales con acento
Publicado por: cesariox23 en 29 Junio 2014, 07:19 am
Les agradezco mucho la ayuda prestada, es motivador saber que mis dudas son solventadas por personas con gran conocimiento del tema.

Saludos y éxitos a todos!!