Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: noctis en 24 Octubre 2010, 12:33 pm



Título: como poner acentos
Publicado por: noctis en 24 Octubre 2010, 12:33 pm
estoy con C y no puedo poner acentos para las palabras al intentar copiar un texto muchas gracias


Título: Re: como poner acentos
Publicado por: Horricreu en 24 Octubre 2010, 13:12 pm
  • Si estás programando en C, la función printf() (http://www.cplusplus.com/reference/clibrary/cstdio/printf/) te permite, mediante el parámetro de carácter %c, pasarle un código ASCII, en este caso un acento.
  • Si estás programando en C++, la librería clocale junto con la función de salida de la librería iostream, cout (http://www.cplusplus.com/reference/iostream/cout/), te permite trabajar con acentos con total normalidad.

Este es un ejemplo para C:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. printf("%c.", 160);
  6.  
  7.  
  8. return 0;
  9. }

Y este para C++:

Código
  1. #include <iostream>
  2. #include <clocale>
  3.  
  4. int main()
  5. {
  6. std::locale::global(std::locale("spanish"));
  7.  
  8. std::cout << "á.";
  9.  
  10. std::cin.get();
  11.  
  12. return 0;
  13. }

Espero que haya quedado claro :)


Título: Re: como poner acentos
Publicado por: тαптяα en 24 Octubre 2010, 13:26 pm
Código
  1. #include <stdio.h>
  2. int main(){
  3. printf("Hay un %crbol, que mat%c a un colibr%c.",160,162,161);
  4. printf("\nHay un \xA0rbol, que mat\xA2 a un colibr\xA1.");
  5. return 0;
  6. }
  7.  

Espero que entiendas el porque.

Ahora todos.

á –> printf(”%c”,160);
é –> printf(”%c”,130);
í –> printf(”%c”,161);
ó –> printf(”%c”,162);
ú –> printf(”%c”,163);

á –> printf(”\xA0″);
é –> printf(”\x82″);
í –> printf(”\xA1″);
ó –> printf(”\xA2″);
ú –> printf(”\xA3″);


Título: Re: como poner acentos
Publicado por: MG2010 en 24 Octubre 2010, 13:29 pm
Citar
Si estás programando en C++, la librería locale junto con la función de salida de la librería iostream, cout, te permite trabajar con acentos con total normalidad.
En mi ubuntu no necesito incluir locale... pero supongo que es un buen tip para aumentar la potabilidad del código...

Gracias !


Título: Re: como poner acentos
Publicado por: Horricreu en 24 Octubre 2010, 13:38 pm
Directamente, locale y clocale son librerías standard de C y C++ respectivamente.


Título: Re: como poner acentos
Publicado por: globsharp en 24 Octubre 2010, 14:20 pm
Hay algo que no he entendido, se supone que cuando escribes printf("á") esto lo toma como una 'a' y un acento, osea, dos caracteres, que es lo que se detecta normalmente como un caracter extraño, ¿no? ¿Y cuando usas el código ASCII lo detecta como un único carácter y este lo detecta correctamente cualquier codificación?

A ver si lo he entendido bien, pues con el tema de los acentos sigo liándome mucho.


Título: Re: como poner acentos
Publicado por: Horricreu en 24 Octubre 2010, 14:59 pm
Es que "á" es un solo carácter ;D Acentos y caracteres especiales del alfabeto latino, que NO forman parte del propio código ASCII, están en su ampliación estándar ISO/IEC 8859-1 (http://en.wikipedia.org/wiki/ISO/IEC_8859-1).


Título: Re: como poner acentos
Publicado por: globsharp en 24 Octubre 2010, 15:45 pm
¿Pero entonces por qué al hacerlo con código ASCII se visualiza bien y al hacerlo poniendo directamente 'á' sale un caracter extraño? ¿No es lo mismo?  :huh:


Título: Re: como poner acentos
Publicado por: Horricreu en 24 Octubre 2010, 16:05 pm
La verdad es que no sé el por qué. Pero si quieres, puedes cambiar la configuración de tu proyecto a Unicode y, utilizar una función de salida con caracteres especiales sin ningún tipo de problema.


Título: Re: como poner acentos
Publicado por: globsharp en 24 Octubre 2010, 16:19 pm
Aah ya lo entendí, es por la codificación en el proyecto. Es que me parecía lo mismo y por eso no lo entendía, gracias ;)