19/03/2024
# Tags
#C++ #Programación

Streams: el objeto cout

Revisamos el objeto cout y el concepto de stream, también se introducen términos como concatenación, secuencia de escape y porque no usar printf() en C++

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, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.tutorialspoint.com/compile_cpp_online.php
#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.

printf() y cout() en C++
printf() y cout() en C++

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 tiene sentido si estás aprendiendo C++

Resumen, siempre que veas printf() cámbialo 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,

cout sin salto de línea
cout sin salto de línea

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:

// endl.cpp
// Se ilustra el uso del identificador endl
// 2017, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.tutorialspoint.com/compile_cpp_online.php
#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 escapeCaracter
\nnueva línea
\ttabulación horizontal.
\\Diagonal invertida
\”comillas dobles

El siguiente programa ilustra el uso de secuencias de escape, y «la otra forma de hacerlo»,

// sescape.cpp
// Se ilustra el uso de secuencias de escape
// 2017, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.tutorialspoint.com/compile_cpp_online.php//
#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.

Ethical Hack
Powered by Ethical hack

Referencias

  • RCG

Fuente Imágenes

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

Tutorial de C++ by eHack


Licencia de Creative Commons Streams: el objeto cout by Roberto C. González is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.
Streams: el objeto cout

Permanezca Legal

Leave a comment

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