Test Foro de elhacker.net SMF 2.1

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:


#include <stdio.h>

int main()
{
   printf("\n**Vocales acentuadas**\n");
   printf("\n \265rbol - \265rbol");
   printf("\n Empec\220 - empec\202");
   printf("\n Decid\326 - decid\241");
   printf("\n Comunicaci\340n - comunicaci\242n");
   printf("\n \351til - \243til\n");

   printf("\n**Simbolos especiales del espa\244ol**\n");
   printf("\n \245o\244o");
   printf("\n \250D\242nde estoy?");
   printf("\n \255Ven aqu\241!");
   printf("\n Creo ver un ping\201ino");

   return 0;
}


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



**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!!