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.
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;
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’ |
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;
}