[C con Clase] Variales char

Steven Davidson steven en conclase.net
Jue Ene 25 07:27:20 CET 2007


Hola Alejandro y Santiago,

El pasado 2007-01-24 19:56:40, Alejandro escribió:
 
A> Hola, somos dos chavales gallegos de 13 años que estamos empezando a programar en C++. Nos gustaría saber algo más sobre las variables "char". Especificando, en el curso decís que las variables charsirven para almacenar números, pero, en un programa como éste:

Antes de seguir, quiero decir que voy a agregar a lo que ya ha mencionado Lucas.

A> #include<iostream>
A> using namespace std;
A> int main()
A> {
A>     char a;
A>     
A>     a = 1;
A>     cout << a;
A>     
A>     cin.get();
A>     return 0;
A> }
A> Lo que se muestra al final en pantalla es una carita sonriente en color blanco.
A> Sin embargo, si defines 'a = 65;' el resultado es la letra a en min´´uscula. ¿Alguien me explica qué pasa? Lo que yo creo es que las variables char SÓLO almacenan números, no los muestran. Porque en este programa:

Casi. Tienes que tener claro que está lo que existe en una variable, como es 'a', y lo que hace 'cout <<' con ese valor en 'a'. En otras palabras, no confundas la interpretación que hace 'cout <<' con lo que realmente hay en 'a'.

'cout <<' interpreta un valor de tipo 'char' como una representación de un carácter - un símbolo: letra, dígito, signo, etcétera. Internamente, un valor de tipo 'char' es un número entero. Por ejemplo, el valor de 65 equivale a la letra 'A'; el valor de 32 es el espacio, ' '; etc.. El estándar es usar la tabla ASCII que establece las correspondencias del código numérico con su carácter. 'cout <<' sigue estas interpretaciones den cuanto "vea" un valor de tipo 'char'. Esto es porque se diseñó el tipo 'char' para representar caracteres, aunque internamente son números enteros.

A> #include<iostream>
A> using namespace std;
A> int main()
A> {
A>     char a;
A>     int b;
A>     
A>     a = 10;
A>     b = a * a;
A>     cout << b;
A>     
A>     cin.get();
A>     return 0;
A> }
A> El resultado es cien. Decid me, por favor, si estoy en lo cierto.

Para poder mostrar el número entero en un 'char' con 'cout <<', tendremos que "engañar" a 'cout <<' para que interprete el 'char' como un número entero. Lo más fácil es hacer un cásting, o como has hecho anteriormente, usar una variable intermedia de otro tipo entero. Por ejemplo,

char a = 65;
cout << "a = " << (int) a << endl;

O como has intentado hacer,

char a = 65;
int aux = a;

cout << "a = " << aux << endl;


Espero haber complementado el comentario de Lucas.

Steven


Más información sobre la lista de distribución Cconclase