C y C++ son lenguajes americanos, por lo tanto están pensados para mostrar y/o ingresar texto en inglés, y este normalmente carece de acentos, y no posee signo de apertura de exclamación o de interrogación, por esa razón a todos esos caracteres con esta característica los toma como símbolos, el compilador de C y C++ los ve como símbolos. Eso ocurre también con demás caracteres y letras en otros idiomas distintos al inglés, como letras con circunflejo, con cedilla, o con cualquier símbolo fonético sobre una letra o debajo de esta que no pertenezca al alfabeto inglés ya que por defecto estos están configurados para escribir texto en dicho idioma.
Este hecho provoca el problema de que cuando queremos colocar, por ejemplo, la u con tilde para que en tiempo de ejecución se muestre, por ejemplo, la palabra "número", pero cuando ejecutamos por pantalla nos queda "n·mero", palabra con falta.
En C
Para colocar tildes y demás letras con algún tipo de acentuación en el texto que se quiere mostrar en tiempo de ejecución se debe hacer uno de los siguientes pasos:
Una de las formas de colocar tildes y demás acentos es utilizar un identificador de variables del tipo carácter y colocar al final el código ASCII de dicho carácter:
Ej.:
Código:
Donde %c es el identificador de variable, en este caso c de carácter, y 160 que es el código ASCII del símbolo á
Otros símbolos:
á:
Código:
é:
Código:
í:
Código:
ó:
Código:
ú
Código:
ñ:
Código:
°
Código:
¿:
Código:
En C/C++
Otra forma que tenemos para colocar tiles es la siguiente:
Usamos la siguiente fórmula:
\xnn
donde \ en este caso es el carácter que le indica a C/C++ que vamos a colocar una expresión de llamado, x de hexadecimal y nn es el número en hexadecimal del carácter ASCII correspondiente a dicho símbolo.
Ej.:
Buscamos en código ASCII correspondiente al símbolo "ú" que es 163. Luego, ese código lo convertimos a
hexadecimal que sería a3 y lo ponemos sustituyendo en la fórmula al nn y nos queda \xa3. Esto le ordena a C que llame al código ASCII en hexadecimal y cargue el símbolo en tiempo de ejecución.
Esto lo colocamos sustituyendo el símbolo por su correspondiente en la palabra que contenga el símbolo Ej.: en tiempo de diseño queda así: n\xa3mero
Compilamos y en tiempo de ejecución nos queda "número"
Otros símbolos:
á:
Código:
é:
Código:
í:
Código:
ó:
Código:
ú
Código:
ñ:
Código:
º:
Código:
¿:
Código:
Conflictos de carácter:
Pueden existir conflictos de carácter, cuando el compilador interpreta la siguiente letra de la palabra como parte del código hexadecimal, esa secuencia no se corresponde con ningún símbolo ascii, y el compilador de C o C++ no entiende a que símbolo queremos llamar, por eso muestra la siguiente advertencia en el mensaje de construcción: warning: hex escape sequence out of range (advertencia: secuencia hex [hexadecimal] fuera de rango).
Este error se puede solventar realizando dos printf donde en el primero se deja la palabra a medias (ra\xA1) y el siguiente se iniciaría con el resto de la(s) palabra(s) sin utilizar un \n.
Ej.:
Código:
Código:
otra forma de escribir lo mismo sería:
Código:
Concatenamos una cadena de texto con el llamado al símbolo con la otra cadena de texto con el carácter, que es un y de concatenación para que se muestren concatenados ambas cadenas de texto en el tiempo de ejecución.
Otra forma de corregir este error es poner la expresión \xnn entre comillas dobles:
Código:
De estas dos formas se evitan los posibles conflictos de carácter que ocurren en C y C++
También existen ciertos símbolos que el compilador de C y C++ los interpreta como letras acentuadas o con chiu:
á:
Código:
é:
Código:
í:
Código:
ó:
Código:
ú:
Código:
Código:
Símbolo de grado: º:
Código: