Streams: el objeto cout

Streams: el objeto cout

Los streams (flujos) se utilizan para ejecutar operaciones de entrada y salida de datos.

En C++ el dispositivo de salida estándar es el monitor, y podemos acceder a él con el objeto de flujo cout (console out) y se utiliza el operador de inserción << para insertar los datos que se encuentran del lado derecho dentro del flujo  que se encuentra a la izquierda del operador.

De este modo la sentencia:

cout << "Hola mundo!";

Despliega la cadena “hola mundo!” en el dispositivo predeterminado de salida (monitor) el operador de inserción indica el sentido en que se canaliza la información.

Concatenación

Entendemos como concatenación a la unión de 2 o más objetos en uno solo.

Por ejemplo, consideremos el siguiente programa:

// Concatenacion1.cpp
// Se ilustra el concepto básico de concatenación
// 2017, by carlosgbr

#include <iostream>
using namespace std;

int main()
{
  cout << "Esta es la cadena 1";  //Recuerda que cada sentencia termina con punto y coma
  cout << "Esta es la cadena 2"; 

  cout << "Esta es la cadena 1" << "Esta es la cadena 2";  //Cadenas concatenadas

return 0;
}

Al ejecutar el programa obtenemos la siguiente salida.

Objeto cout
Objeto cout

Como puedes observar

 cout << "Esta es la cadena 1"; //Recuerda que cada sentencia termina con punto y coma
 cout << "Esta es la cadena 2";

Este par de sentencias da como resultado un sola cadena de texto, esto es una concatenación que el compilador hace, si quisieras que estas cadenas de texto estuvieran separadas debes indicar explícitamente un salto de línea, más adelante veremos esto.

En la sentencia

cout << "Esta es la cadena 1" << "Esta es la cadena 2"; //Cadenas concatenadas

De forma explícita estamos concatenando (uniendo) 2 cadenas en una sola, de hecho podemos concatenar múltiples cadenas utilizando el operador de inserción, por ejemplo:

cout << "Esta es la cadena 1" << " " << "Esta es la cadena 2" << " " <<  "Esta es la cadena 3"; //Cadenas concatenadas

Observa que se añadieron espacios en blanco para mejorar la lectura entre cada cadena (<< ” “<< ), te sugiero que vayas cambiando el código original con todos estos cambios y por su puesto es deseable que tú empieces a hacer cualquier cambio que se te ocurra, esa es la mejor manera de aprender: equivocándote y corrigiendo

printf()

Quienes haya programado en C estándar utilizan la función printf() para hacer lo que se hace en C++ con cout()

 printf("Salida de texo con printf"); //Con esta función se muestra texto en pantalla en C estándar
 cout << endl; //añadimos un salto de línea
 cout << "Salida de texto con cout"; //En C++ utilizamos cout en lugar de printf()

Compila y ejecuta el código anterior y verás que aparentemente no hay diferencia entre una y otra, sin embargo si la hay, aunque en nivel básico no se vea. He mencionado la función printf() con el propósito de mencionar que muchos programadores de C++ que inician la utilizan y es importante mencionarlo desde el principio, su uso es una mala práctica y deberías abstenerte en utilizarla. Cuando requieras dar salida hacia el dispositivo estándar debes utilizar el objeto cout.

Como mencioné en la introducción, C++ soporta completamente el estándar de C, por tanto se soporta printf() y otras funciones muy arraigadas en programadores que llegan de C y solo deberías utilizar printf() por cuestiones de compatibilidad con C, lo cual no tienes sentido si estás aprendiendo C++

Resumen, siempre que veas printf() cambialo por cout, aparte de ser más elegante, es más poderoso.

Modificando el comportamiento de cout

En su forma básica, cout() despliega lo que se le manda con los operadores de dirección

cout << "Desplegar texto";  // Muestra en pantalla "Desplegar texto"
cout << 6;  // Muestra en pantalla el número 6
cout << 2+3;  // Muestra en pantalla el número 5
cout << "2+3";  // Muestra en pantalla "2+3"
cout << "2+3 = " << 2+3;  // Muestra en pantalla "2+3 = 5"

Cuando ejecutas este código obtienes,

es claro que no es la mejor forma de presentar la información en la pantalla, para separar cada línea podemos añadir un salto de línea, lo cual podemos hacer con la instrucción:

endl  // “end line” inserta un salto de línea al final de la línea actual.

adecuando con endl, el código anterior tenemos:

#include <iostream>
using namespace std;

int main() 
{    
   cout << "Desplegar texto" << endl; // Muestra en pantalla "Desplegar texto"    
   cout << 6 << endl; // Muestra en pantalla el número 6    
   cout << 2+3 << endl; // Muestra en pantalla el número 5    
   cout << "2+3" << endl; // Muestra en pantalla "2+3"    
   cout << "2+3 = " << 2+3 << endl; // Muestra en pantalla "2+3 = 5" 
   
return 0;
}

y nos dará la siguiente salida:

Uso de cout y endl
Uso de cout y endl

Como puedes observar, puedes utilizar endl para hacer más legible la salida de tus programas.

Secuencias de escape

Con el objeto cout también puedes utilizar unas secuencias de escape con el fin de manipular la forma en que presentas la información en la pantalla. Una secuencia de escape es un código que representa algunos de los caracteres no imprimibles y algunos imprimibles  del teclado que suelen ser “complicados” de representar por características propias del lenguaje utilizado. Algunos de esos caracteres y su secuencia de escape son:

Secuencia de escape Caracter
\n nueva línea
\t tabulación horizontal.
\\ Diagonal invertida
\” comillas dobles

El siguiente programa ilustra el uso de secuencias de escape, y “la otra forma de hacerlo”,

//
// sescape.cpp Programa que ilustra el uso de secuencias de escape
// 2017, carlosgbr
//
#include <iostream>
using namespace std;

int main() 
{        
// Representamos una pequeña lista de precios en la pantalla, para formatear la salida     
// utilizamos solo espacios y saltos de línea    
cout << """Lista de precios""" << endl << endl;     //Texto con entrecomillado doble no funciona con todos los compiladores    
cout << "Producto                Existencias               Precio" << endl;     
cout << "Pinzas                  5                         $212.00" << endl;     
cout << "Martillo                3                         $250.00" << endl;     
cout << "Caja de herramientas    4                         $800.00" << endl;     
cout << "Desarmador              10                        $25.00" << endl;         

// Representamos una pequeña lista de precios en la pantalla, para formatear la salida     
// utilizamos secuencias de escape        
    
cout << "\"Lista de precios\"" << "\n\n";   //Texto con entrecomillado doble    
cout << "Producto \t\t" << "Existencias\t\t" << "Precio" << "\n";     
cout << "Pinzas\t\t\t\t" << "5\t\t" << "$212.00" "\n";    
cout << "Martillo\t\t\t" << "3\t\t" << "$250.00" "\n";     
cout << "Caja de herramientas\t\t" << "4\t\t" << "$800.00" "\n";  
cout << "Desarmador\t\t\t" << "10\t\t" << "$25.00" "\n"; 
        
return 0;
}

en principio parecerá más tedioso la forma utilizada con secuencias de escape, pero cuando ya estás programando, las secuencias de escape te darán la versatilidad que no tienes utilizando espacios como en la primera parte del ejercicio, de hecho las secuencias de escape te permiten generar gráficos sencillos en tiempo de ejecución, algo que no se puede lograr con puro espaciado.

Formato de texto con espacios y Secuencias de escape
Formato de texto con espacios y Secuencias de escape

No pierdas de vista:

  • La secuencia de escape va dentro del entrecomillado de la cadena de texto, sino hay texto, las secuencias de escape se deben entrecomillar, en nuestro ejemplo se reemplazó el identificador endl por \n
  • Puedes utilizar todas las secuencias de escape que requieras. aunque debes calcular muy bien las posiciones para que no se descuadre tu salida.

Vale la pena que practiques utilizando secuencias de escape, haz variaciones, experimenta.

 


 


¿Deseas aprender BIEN Seguridad Informática “desde el principio”? 

Aplicación de medidas para la implantación de la L.O.P.D. en las empresas

Obtendrás información ampliada y más recursos en comparación con el material que ofrecemos de forma gratuita, y material adicional, visita https://ehack.mx/portfolio-view/material-de-estudio-ceh-online/ para más información o ecríbenos a ceh@ehack.mx

Ethical hack
Ethical hack

 Fuente Imágenes:

“Todas las imágenes de esta sección”: by Nala Systems

 

Licencia Creative Commons
Streams por Roberto C. González se distribuye bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional.
Basada en una obra en http://ehack.info/cpp02/.
Permisos que vayan más allá de lo cubierto por esta licencia pueden encontrarse en https://about.me/carlosgbr.
Comentarios de Facebook

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.