[C++] Problema con vocales con tilde y caracteres especiales.

Iniciado por NOIS, 20 Noviembre 2014, 09:29 AM

0 Miembros y 2 Visitantes están viendo este tema.

leosansan

Cita de: NOIS en 20 Noviembre 2014, 09:29 AM
Hola, estoy realizando un programa de cifrado y desencriptación, explico.
.................................................................
En el nivel 2, en una de las fases convierto los caracteres a cadenas. Si los caracteres son convencionales funciona perfectamente, pero si son vocales con tilde o la letra 'ñ' el programa se detiene inesperadamente.

¿Como podría solucionar esto?


¿ Has probado a usar el teclado en español ?. Te pongo un ejemplo de su uso:

Código (cpp) [Seleccionar]
#include<stdio.h>
#include<locale.h>

int main(void){
  setlocale(LC_ALL, "Spanish");
  printf ("¡Hola leoñanñan! ¿Cuántos tenía años la canción número 2²?\n");
  printf ("2+3.5=%f  \n",2+3.5);
  float a=2.75+3.5;
  printf ("Observa la coma en lugar del punto para marcar los decimales: %g\n",a);
  float b=a*a;
  printf ("b=%f\n",b);
  printf ("¡Ño! enésima \n");
  return 0;
}


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



NOIS

Si, buscando por internet encontré esa solución con la librería locale.h, pero me da error. No encontré nada de que hubiera que linkear ninguna librería al proyecto ni nada parecido.
NOIS dev7

_Enko

#12
Mh... creo que para tu caso te basta con usar el codigo asccii


printf("esp: \xA0\xA1\xA2\xA3\xA4\xA5");

De resultado te da
Citar
esp: áíóúñÑ

Saludos

Orubatosu

Cita de: NOIS en 21 Noviembre 2014, 23:39 PM
Si, buscando por internet encontré esa solución con la librería locale.h, pero me da error. No encontré nada de que hubiera que linkear ninguna librería al proyecto ni nada parecido.

Desde mi modestísimo conocimiento (aún estoy aprendiendo de forma autodidacta C++) creo que puedo darte una posible solución

Pones obviamente la cabecera "<clocale>

Y en la primera línea del "Main"


#include <iostream>
#include <clocale>
using namespace std;

int main(){
    setlocale(LC_ALL, "");

}


Esto hace que uses el "locale" en el que actualmente se encuentre tu equipo. Y modificando algunos valores en el setlocale puedes también cambiar a un país específico, pero no he llegado tan lejos.

He probado manipulando cadenas de diferentes maneras, que incluyen acentos o "ñ", como meterlas en strings, vectores, etc... y me funciona, igualmente me permite mostrarlos por consola.

Supongo que hay mejores formas, pero esta de momento me funciona, si te funciona para lo que quieres, mejor que mejor
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

zShackra

#14
Sucede a veces... que el compilador que manejas no te permite un correcto uso de la función setlocale, yo uso Visual Studio y funciona sin problemas.

Sólo como opinión, deberían incinerar todos esos compiladores y entornos obsoletos... tantas alternativas decentes y todavía la gente se empeña en usar Dev-C++ y Borland...

Orubatosu

Un pequeño problema, es que por ejemplo en Linux no existe ese problema de acentos y caracteres "raros", mientras que en consola de DOS (en sistemas windows) si que existe.

La solución del Locale a mi al menos me funciona en sistemas windows, quizás es un poco "parche", pero mejor eso que nada.
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

zShackra

Cita de: Orubatosu en 23 Noviembre 2014, 11:56 AM
Un pequeño problema, es que por ejemplo en Linux no existe ese problema de acentos y caracteres "raros", mientras que en consola de DOS (en sistemas windows) si que existe.

La solución del Locale a mi al menos me funciona en sistemas windows, quizás es un poco "parche", pero mejor eso que nada.


Para mí no es parche, si es estándar, está bien.