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

Streams: el objeto cin

Anteriormente revisamos que los Streams en C++ nos permiten dirigir la información (de forma más específica, bytes) de y hacia un dispositivo, en esa ocasión vimos que el objeto cout dirigía la información al dispositivo estándar de salida (el monitor, en este caso)

cin

El objeto cin es el opuesto a cout, cin dirige el flujo de información desde el dispositivo estándar de entrada (el teclado) al programa. La entrada que recibimos desde el teclado debemos almacenarla para su posterior uso. Normalmente utilizaremos variables para almacenar temporalmente los datos recibidos.

cin es acrónimo de entrada por teclado (console input) y es la forma más simple de recibir datos del usuario. Y es, a demás, la forma más elemental de añadir interactividad a tus programas.

Sintaxis de cin

La sintaxis de cin es la siguiente

cin >> entrada;

El operador «>>» se denomina de extracción o de lectura. Toma el valor del flujo de su izquierda y lo sitúa en la variable situada a la derecha.

Por ejemplo, si deseamos recibir la edad del usuario, podemos utilizar las siguientes instrucciones:

int edad;
cin >> edad;

definimos la variable edad como entero y con la sentencia cin asignamos la entrada del usuario en edad.. si deseamos calcular por ejemplo, el área de un círculo, debemos solicitar el radio:

double radio;
cin >> radio;

como puedes apreciar es muy sencillo el uso del cin para recibir una entrada desde el teclado. cin Ejemplo,

Analizando el uso de programas con cin

A continuación vemos que el uso de cin amplía la capacidad de nuestros programas para resolver problemas de forma más útil de cara al usuario.

// cin.cpp
// Este programa muestra el uso del stream de entrada cin(), con la información obtenida obtenemos el IMC
// (IMC = Índice de masa corporal) utilizando la fórmula: IMC = masa / estatura^2 de acuerdo a
// https://es.wikipedia.org/wiki/%C3%8Dndice_de_masa_corporal
// 2017, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.onlinegdb.com/online_c++_compiler
#include <iostream>
using namespace std;
int main()
{
    char nombre[10];
    float peso, estatura, imc;
    cout << "Después de escribir el dato que se te pide, pulsa la tecla ENTER ó ACEPTAR" << endl << endl;
    cout << "Este programa te permitirá conocer tu índice de masa corporal (IMC)" << endl << endl;
    cout << "Cuál es tu nombre?:" << endl;
    cin >> nombre; //Se lee y almacena el nombre
    cout << "Mucho gusto " << nombre << ", por favor, dime tu peso en kilogramos: " << endl;
    cin >> peso; //Se lee y almacena el peso
    cout << "Muy bien, ahora por favor, dime tu estatura en metros: " << endl;
    cin >> estatura; //Se lee y almacena la estatura
    //cálculo del IMC
    imc = peso / (estatura*estatura);
    cout << "Muy bien " << nombre << ", Te informo que tu Índice de Masa Corporal es: " << imc << endl;
    cout << "Lo cual no es  ni bueno ni malo, sino todo lo contrario." << endl;
    return 0;
}

A continuación se muestra una salida del programa:

Ejemplo de uso: cin
Ejemplo de uso: cin

Como puedes apreciar, ya es un programa «que hace algo», el código es bastante claro y están documentados los conceptos nuevos, sin embargo vale la pena hacer algunas observaciones generales.

  • Nota que para almacenar el nombre, se define una variable char, la cual nos permite almacenar una letra, sin embargo la notación utilizada char nombre[10] indica que nombre puede contener hasta 10 caracteres, esto se llama un «arreglo o array», más adelante revisaremos este tema, por lo pronto es importante que sepas que así puedes almacenar palabras más allá del límite de un carácter propio de una variable de tipo char. Si necesitas almacenar nombres más extensos que 10 letras, basta con aumentar este valor.
  • Observa que el programa comienza dando instrucciones al usuario, y en las siguientes líneas le deja claro al usuario que información espera el programa, indicando incluso el formato (kilogramos, metros). Te siempre presente que no basta que un programa funcione bien, debe funcionar bien y debe ser «amigable con el usuario», muchas buenas ideas han fracasado por no ser «atento y divertidos» con el usuario. Así que recuerda, trata bien a tu usuario, así como a tí te gusta que te traten bien.
  • Observa que los comentarios en el encabezado del programa hacen referencia al origen de la fórmula que utilizamos, además de describir a la fórmula en sí, si bien no es información imprescindible, siempre será buena idea documentar esta información por si se llega a actualizar este programa y se pueda evaluar rápidamente si se requiere hacer cambios en la forma en que se calcula el valor que nos interesa (el IMC en nuestro caso)
  • Finalmente una observación relacionada con el tema de la precedencia de operadores, en este programa queda bastante clara la necesidad de conocer a la perfección este tema. Nota que la fórmula utilizada es IMC = masa / estatura^2 el cuadrado indica que la estatura se debe elevar al cuadrado antes de dividir a la masa. por esta razón la fórmula se ha implementado imc = peso / (estatura*estatura); con los paréntesis estamos dejando claro que queremos evaluar primero el cuadrado de la estatura para después realizar la división de la masa. A modo de ejercicio te sugiero que quites los paréntesis de la fórmula y ejecutes el programa, notarás la diferencia de forma inmediata con los resultados obtenidos. Finalmente restablece los paréntesis para que el programa funcione bien.

Tal vez notes que para este ejercicio he cambiado de compilador en línea, en este ejercicio se utilizó el compilador disponible en https://www.onlinegdb.com/online_c++_compiler pues el que venía utilizando hasta el ejercicio anterior, no procesa de forma correcta las entradas del objeto cin, por eso tuve que buscar otra alternativa, junto al compilador mencionado, he revisado que los compiladores https://www.jdoodle.com/online-compiler-c++ (requiere «encender» el switch interactivo para procesar las entradas con cin() ) y https://repl.it/languages/CPP

Ya ha quedado bastante claro el uso y función de cin(), y de hecho es lo que casi siempre harás con este stream, sin embargo resulta conveniente que sepas que cin se puede utilizar con diversos modificadores que te permiten controlar de una forma más eficiente y precisa las entradas de datos que recibes.

Concatenación con cin

Puedes encadenar varias entradas con el objeto cin, por ejemplo si vas a solicitar 4 valores del mismo tipo, puedes pedir que los introduzcan seguidos separándoles por un espacio. No es la forma más clara de solicitar información, pero en ciertas circunstancias, puede resultar lo más óptimo.

Por ejemplo si vas a solicitar 3 temperaturas puedes escribir

cin >> temperatura1
cin >> temperatura2
cin >> temperatura3

o bien,

cin >> temperatura1 >> temperatura2 >> temperatura3

El siguiente programa ilustra esta forma de uso.

// cin2.cpp
// Este programa muestra el uso del stream de entrada cin(), muestra el uso
// de cin() encadenado
// Calculamos el área y perímetro de un cuadrilátero regular
// 2017, Por http://about.me/carlosgbr
// VersiC3n 1
// Compilado en https://www.onlinegdb.com/online_c++_compiler
#include <iostream>
using namespace std;
int
main ()
{
  float lado1, lado2, area, perimetro;
  cout <<
    "Después de escribir el dato que se te pide, pulsa la tecla ENTER ó ACEPTAR"
    << endl << endl;
  cout <<
    "Este programa calcula el área y perímetro de un rectángulo" <<
    endl << endl;
  cout <<
    "Indica el lado1 y el lado2 separados por un espacio, depués pulsa ENTER:" <<
    endl;
  cin >> lado1 >> lado2;		//Lee los lado de forma encadenada
  //Corroboramos que tenemos los 2 lados almacenados
  cout << "El lado1 mide: " << lado1 << ", El lado2 mide: " << lado2 << endl;
  //Calculamos el perímetro p = l+l+l+L
  perimetro = (lado1 * 2) + (lado2 * 2);
  //Calculamos el área
  area = lado1 * lado2;
  cout << "El cuadrilátero tiene dimensiones de: " << lado1 << " x " <<
    lado2 << " unidades" << endl << endl;
  cout << "El perímetro es de: " << perimetro << " unidades. " <<
    "Y el área es de: " << area << " unidades cuadradas" << endl;
  return 0;
}
Concatenación con cin()
Concatenación con cin()

Otros modificadores

cin, como objeto que es, tiene asociadas funciones para manejar cadenas de texto, validación de caracteres y control de flujo, aún faltan algunos conceptos básicos que desde mi punto de vista debes conocer para poder abordar con comodidad su descripción y uso. Por esta razón el tema se retomará adelante, una vez que cuentes con más herramientas.


eHack Logo

 Fuente Imágenes

  • «Todas las demás imágenes de esta sección»: by Nala Systems

Código Fuente

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

Precedencia de operadores en C++

Streams: el objeto cin

Estructuras de control

Leave a comment

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