Como poner tildes y Ñ en C++

Imprimir tildes, ñ y signo de interrogación

Si intentamos colocar caracteres hispanos como las tildes, la ñ o incluso los signos de apertura de exclamación e interrogación en programas creados en C++, nos imprimirá unos cuadrados que nos dejan en claro el hecho de que nuestro programa es incapaz de manejar estos caracteres, esto se debe a que C++ es naturalmente compatible solo con los caracteres del idioma ingles.

Obviamente podemos solucionar esto, por eso dije "naturalmente" para hacer referencia a que debemos de implementar un par de funciones y una librería extra para indicarle a nuestro programa que queremos utilizar también los caracteres del idioma español.

Código para poner ñ y otros caracteres en C++



#include <iostream>
#include <cstdlib> // contiene la funcion system("pause")
#include <locale.h> // Libreria que contiene la funcion setlocale

using namespace std;

int main(){
setlocale(LC_ALL, ""); // Uso de la funcion setlocale (abajo se explica)

cout << "ñuá" << endl; // Imprimimos por pantalla cualquier caracter hispano

system("pause");
}


Ejemplo compilado aceptando caracteres hispanos

Si se está preguntando qué es lo que hace exactamente la función setlocale se debe a que al igual que yo no nos basta con memorizar y repetir lo aprendido sin más, sino que necesitamos entender porque algunas cosas funcionan como funcionan, setlocale(); sirve para configurar nuestro programa acorde a los parámetros locales de la computadora donde se ejecuta el programa, uno de estos parámetros es el idioma.

Dentro de la función setlocale se escriben dos parámetros LC_ALL es el primero e indica que queremos adaptar nuestros programas a todos (all) los parámetros locales, pero en ese primer parámetro también podemos colocar otros parámetros como "LC_MONETARY" para configurar únicamente el formato monetario de nuestro programa (dólares, euros, libras entre otros...). En el segundo parámetro hemos dejado las comillas sin nada adentro esto es para que sean utilizados los parámetros de la configuración estándar del dispositivo.

Existe un problema con el código anterior



Lo anterior tiene un problema y es que si el sistema operativo del dispositivo no está configurado con parámetros hispanos no aceptará nuestros caracteres, la solución es muy sencilla, dentro de las comillas del segundo parámetro colocaremos la palabra "spanish" para que así se utilicen los parámetros hispanos por defecto, veamos el cambio.

setlocale(LC_ALL, "spanish");


Estos pequeños cambios en nuestro programa añaden al mismo mayor seriedad y efectividad, le recomiendo que a partir de ahora configure todos sus programas para que acepten también los caracteres hispanos, recuerde que la función setlocale(); debe de ir dentro de la funcion main y antes de cualquier texto, de lo contrario el texto que se imprima antes de esta función no permitirá estos caracteres.
Comentarios y preguntas
Brayan:
Excelente
Codigazo:
Hola Brayan me alegra que le fuese de ayuda.
Ludmila:
Gracias!
Yeray:
Gracias, muy útil!.
Dari:
Funciona y es una solucion sencilla gracias
Codigazo:
Hola Ludmila, Yeray y Dari, gracias a ustedes por sacar el tiempito para comentar.
Melissa:
Excelente explicación, muchísimas gracias !!
Emmanuel:
Muy buena explicaciòn.
Esta muy bien explicada.
Irving:
Gracias
Codigazo:
Irving, Melissa y Emmanuel, gracias a ustedes por su agradecimiento y por darme animo.
Manuel:
No me funcionó, no me deja poner la librería iostream :(
Codigazo:
Manuel, Si no se lo permite poner la librería iostream entonces el problema está en su compilador, pruebe instalando el IDE Code Blocks o reinstalando su IDE actual.