Representación hexadecimal de las vocales con acento

Iniciado por cesariox23, 24 Mayo 2014, 16:09 PM

0 Miembros y 1 Visitante están viendo este tema.

cesariox23

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

leosansan

#1
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! ..... !!!!



JoelGonzalez

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.

cesariox23

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