Make your own free website on Tripod.com

Interacción. Input y Output

 

Entrada de datos en los programas

 

El archivo de cabecera iostrem contiene, entre otras cosas, la definición de dos tipos de datos: istream y ostream. Estos tipos de datos representan secuencias de input y secuencias de output respectivamente. El archivo iostream contiene declaraciones como estas:

 

istream cin;

ostream cout;

 

La primera declaración dice que cin (se pronuncia “see-in”) es una variable tipo istream. La segunda dice que cout (se pronuncia “see-out”) es una variable de tipo ostream.

 

Puedes producir la salida de valores desde cout usando la inserción de los operadores (<<), que a veces se pronuncian como “put to”:

 

cout << 3 * precio;

 

De la misma forma, puedes entrar datos desde cin usando el operador de extracción (>>), que a veces se pronuncia como “get from”:

 

cin >> costo;

 

Cuando la computadora ejecuta esta instrucción, ella coloca el siguiente número que se escribe desde el teclado (456, por ejemplo) y lo guarda en la variable costo. Esta variable debe estar declarada con anterioridad.

 

Se puede usar el operador >> muchas veces en una sola instrucción. Por ejemplo, no hay diferencia entre

 

cin >> largo >> ancho;

 

Y este otro par de instrucciones:

 

cin >> largo;

cin >> ancho;

 

Resumiendo, la instrucción

 

cout >> largo;

 

envía datos desde la variable largo al output stream de la pantalla. La instrucción

 

cin >> largo;

 

envía datos desde el input stream a la variable largo.

 

Reading Marker

 

Para explicar con más detalle el stream input te introduzco el concepto de reading marker.  El reading marker (marcador de lectura) trabaja similar al bookmarker, sólo que en lugar de marcar un lugar en el libro, el reading marker guarda la secuencia del punto en el input stream donde la computadora debe continuar leyendo. El reading marker indica el siguiente carácter para ser leído. El operador >> coloca el reader marker en el siguiente carácter de la última pieza de datos entrados.

 

Cada línea input tiene un invisible carácter de final de línea (el newline carácter) que dice a la computadora donde finaliza una línea y dónde empieza la siguiente. Vimos cómo el programa genera una nueva línea al usar el manipulador endl.

 

En C++ se puede hacer referencia directamente a una nueva línea usando los símbolos \n, un backlash y una n sin espacios. Aunque \n consiste de dos símbolos, el programa los trata como sifuera un solo carácter.  Se puede guardar el carácter de la nueva línea dentro de una variable:

 

ch = ‘\n’;

 

También puede colocarse como parte de un string, sustituyendo al manipulador endl:

 

cout << “Hola\n”;

 

Esta instrucción es similar a la de

 

cout << “Hola” <<endl;

 

Lectura de varios strings con la función getline

 

Existen dos opciones para entrar un carácter o string: el operador >> y la función getline. Aunque se usa ampliamente el operador >> para el input de un string, éste tiene una limitación: no puede usarse para entrar un string que tiene espacios en blanco dentro del mismo. Este operador detiene la lectura tan pronto encuentra un blanco.  Esta limitación se supera con la función getline. La llamada a esta función  luce así:

 

getline(cin, miString);                     // miString es una variable previamente declarada y definida

 

La función llamada requiere dos argumentos. El primero es una variable input stream (cin) y el segundo una variable tipo string (en este caso miString). La función getline no salta al encontrarse con un espacio en blanco y continúa hasta encontrarse con el carácter de nueva línea ‘\n’. En otras palabras, lee y guarda el input de una línea entera.

 

 

Instrucción

Salta los espacios en blanco

 

¿Cuándo detiene la lectura?

cin >> inputStr;

Si

Cuando encuentra el carácter de un espacio en blanco

getline (cin, inputStr;

No

Cuando encuentra ‘\n’

 

 

Input/Output interactivos

 

Hasta ahora hemos usado sólo la variable cout. En esta lección practicaremos la variable cin y la cout de forma interactiva. El programa interactivo permite comunicarse el usuario con la computadora. La mayoría de los programas requieren interactividad.

 

// Este Programa pregunta por el nombre, toma el nombre

// y presenta un mensaje que contiene un saludo y el nombre,

 

#include <iostream>

#include <string>

 

using namespace std;

 

 

int main()

{

    string nombreUsuario;

 

    cout << "¿Como te llamas? Luego de escribir tu nombre presionas ENTER: ";

    cin >> nombreUsuario;                                         // El dato entrado desde el teclado se guarda en nombreUsuario

    cout << "Hola " << nombreUsuario << ‘!’ << endl;

 

    return 0;

}

 

Corre de nuevo el programa anterior y trata de entrar como nombre Paola Marie. ¿Qué sucedió? Sólo aparece el primer nombre. Si quieres que imprima el nombre competo tienes que usar la función getline.

 

//**************************************************************************

// El mismo programa anterior con la función getline

// Este programa permite entrar una línea completa

//**************************************************************************

 

#include <iostream>

#include <string>

 

using namespace std;

 

 

int main()

{

    string nombreUsuario;

 

    cout   << "¿Como te llamas? Entra el nombre con dos apellidos,"

              << "luego presionas ENTER dos veces:  ";

    getline (cin, nombreUsuario);                                           // Se pueden entrar varios strings

    cout << "Hola " << nombreUsuario << '!' << endl;

 

    return 0;

}

 

//**********************************************************************************************

// Este programa permite entrar nombre y apellido sin getline,

// pero con dos pares de operadores >> o dos cin

//***********************************************************************************************

 

#include <iostream>

#include <string>

using namespace std;

 

int main()

{

    string primerNombre;

    string apellido;

 

    cout << "Nombre y apellido: ";

    cin >> primerNombre >> apellido;

    cout << endl;

    cout  << "Hola " << primerNombre << '  '

             << apellido << endl;

    return 0;

}

 

 

#include <iostream>

#include <string>

using namespace std;

 

int main()

{

    string primerNombre;

    string apellido;

 

     cout << "Nombre: ";

     cin >> primerNombre;

     cout << "Apellido: ";

     cin  >> apellido;

     cout << endl;

     cout  << "Hola " << primerNombre <<'  '

             << apellido << endl;

    return 0;

}

 

 

//=======================================================================
// El mismo programapero en  en ingles.
// Prompt the user to enter a name, collect the name,
// and display a message to the user that contains
// the name.
 
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string userName;
 
    cout << "What is your name? :";
    cin >> userName;
    cout << "Hello " << userName << "!" << endl;
 
    return 0;
}

 

 

//===============================================================

//Este programa suma dos números

// *************************************************************************

#include <iostream>

#include <string>

 

using namespace std;

int main()

 

{

    int primerNumero, segundoNumero, suma;    /* Nuestras variables */

 

 

         cout <<"Introduce el primer número ";

         cin >> primerNumero;

         cout <<"Introduce el segundo número ";

         cin >> segundoNumero;

         suma = primerNumero + segundoNumero;

         cout <<"La suma es " << suma << endl;

 

    return 0;

}

 

 

 

// Este programa demuestra el uso del input

 

#include <iostream>
#include <string>
using namespace std;
 
int main()
{
 
   int partNumber;
   int quantity;
   float unitPrice;
   float totalPrice;
 
   cout       << fixed << showpoint      // Calibra el punto decimal
              << setprecision(2);                       //formato del ouput

 

   cout << “Entra la parte del número:” <<endl;
   cin >> partNumber;
 
   cout << “Entra la cantidad ordenada de esta parte:” << endl;
   cin >> quantity;
 
   cout << “Entra el precio de la unidad para esta parte:” << endl;
   cin >> unitPrice;
 
   totalPrice = quantity * unitPrice;
   cout       << “La Parte “ << partNumber
              << “, con la cantidad de “ << quantity
              << “,  a  $    <<unitPrice << “cada una”<< endl;
   cout      << “suma un total de $  “ <<totalPrice  << endl;
   return 0;
}

 

 

Ejercicios

 

  1. ¿Cuál es la diferencia entre los objetos iostrem cin y cout? 

 

  1. ¿Qué función hay que usar para entrar una línea completa?

 

  1. El dueño de un garaje te pide que le hagas un programa que compute el número de la pieza, el nombre de la pieza, el costo por unidad y el costo total si el cliente lleva dos o más unidades. Utiliza las funciones cin y cout. Recuerda declarar variables.