Entrada y salida

Frecuentemente un programa necesitará obtener información desde, por ejemplo, un teclado, o bien enviará la información a un destino, por ejemplo a una pantalla. La comunicación entre el origen de cierta información y el destino se realiza mediante un flujo de información (stream).

entrada_salida2

Todas las clases pertenecen  al espacio std. La clase ios permite manipular operaciones generales de E/S. La clase istream se deriva de los ios y permite manipular operaciones de entrada. La clase ostream se deriva de ios y permite manipular operaciones de salida. Y la clase iostream se deriva de istream y de ostream y permite manipular operaciones de entrada E/S.

 Los streams más utilizados para introducir y sacar datos son cin y cout respectivamente. Para la utilización de dichos streams es necesario incluir, al comienzo del programa, el archivo iostream.h en el que están definidos sus prototipos:

iostream

donde iostream proviene de input-output-stream (flujo de entrada/salida).

Cuando un programa C++ se ejecuta, se crean automáticamente tres flujos identificados por estos objetos:

  • Un flujo desde la entrada estándar (teclado): cin.
  • Un flujo hacia la salida estándar (consola): cout.
  • Dos flujos hacia la salida estándar de error (consola): cerr y clog.

entrada_salida3

El flujo cin es un objeto de la clase istream y los flujos cout, cerr y log son objetos de la clase ostream.

atras

 

Flujos de salida

 El stream o flujo de salida cout imprime en la unidad de salida (el monitor, por defecto), el texto, las constantes y variables que se indiquen. Para poder insertar datos en un stream es necesario utilizar el operador de inserción (<<). Así, la forma general de utilizar el flujo de salida cout se puede estudiar viendo su prototipo:

cout << “texto” << variables o expresiones << ...;

Explicación: El objeto cout imprime el texto contenido entre las comillas tal y como está escrito. Entre las comillas se pueden incluir palabras reservadas (sin que C++ las interprete como tales) y las secuencias de escape, las cuales C++ ejecuta y no escribe. Separados por el operador (<<) se pueden incluir variables y/o expresiones (incluso las creadas por el usuario si el operador (<<) ha sido sobrecargado) que cout es capaz de interpretar correctamente e imprimirá en pantalla su valor.

 Los objetos clog y cerr se utilizan de igual manera que cout, aunque es habitual reservarlos para informes sobre operaciones realizados o mensajes de error.

cout_2

Si x es de tipo int y contiene el valor de 10, esta sentencia imprimirá 10. Análogamente, si x es de tipo complex con un valor (1.5, -2), esta sentencia imprimirá (1.5, -2). Esto siempre sucederá mientras x sea de un tipo para que el operador << esté sobrecargado, y lo está para todos los tipos primitivos y algunos derivados como las cadenas de caracteres y el tipo string.

Cuando escribimos más de una expresión ,mediante una única sentencia, éstas se imprimirán en el orden esperado (de izquierda a derecha):

cout_3

cout_4

El operador de inserción (<<), aunque esté sobrecargado, conserva su precedencia, que es lo suficientemente baja como para permitir expresiones aritmética como operandos, sin tener que utilizar paréntesis. Por ejemplo:

cout_5

Esto significa que para las expresiones con operadores de  nivel más bajo debemos utilizar los paréntesis:

cout_6

Los argumentos para el operador de inserción pueden ser de cualquier tipo primitivo o derivado predefinido: string, char[], char, short, int, long, float, double, bool, unsigned int, etc. Veamos un ejemplo con este programa que usa el operador  << para escribir datos de varios tipos en el flujo cout.

cout_7

La salida sería:

cout_8

Podemos observar también que la impresión de un objeto string hace que se imprima la cadena de caracteres tiene almacenado.

atras

 

Flujos de entrada

Cuando un programa define un flujo de entrada, por ejemplo el definido por el objeto cin de la clase istream, El stream o flujo cin es análoga en muchos aspectos a cout, y se utiliza para leer datos de la entrada estándar (que por defecto es el teclado). Junto con cin, también es necesario utilizar el operador de extracción (>>). Así, la forma general de utilizar este flujo es la siguiente:

cin_1

Explicación: El flujo cin almacena en las variables los datos introducidos por el teclado, interpretando el final de cada una al encontrar un espacio o un final de línea. Se puede ver la ventaja de los operadores propios de C++ para la extracción de datos de consola, y es el hecho de que se evita el chequeo de compatibilidad de entre las variables. Es decir que la variable1 puede ser tipo int y la variable2 tipo double.

 cin_2Si x es de tipo int y se teclea un valor 8, esta sentencia asignará 8 a x. Así mismo, si x es es de tipo complex y se teclea un valor (1.5, -2), esta sentencia asignará (1.5, -2) a x.

Al trabajar con variables tipo char[ ], el flujo cin sólo acepta texto sin espacios. Si lo que se desea es introducir en la misma variable varias palabras (texto con espacios incluidos, (por ejemplo un nombre y apellidos), se debe utilizar una función del flujo cin, de la siguiente forma:

cin_4

donde límite_de_longitud indica que en la variable no se almacenarán más caracteres que los señalados y carácter_delimitador precisa que si antes del límite se hallara el carácter señalado no se almacenaría nada más en la variable.

La operación del operador de extracción sobre cin finaliza cuando se han asignado los valores a todas las variables o cuando se lee un carácter que no se corresponda con el formato de la variable.

Los argumentos para el operador de extracción pueden ser de cualquier tipo primitivo o derivado predefinido: string, char[], char, short, int, long, float, double, bool, unsigned int, etc. Este ejemplo utiliza el operador >> para obtener datos de varios tipos:

cin_6

Cuando un flujo se utiliza en una condición, su estado es analizado cada vez que ésta se ejecuta, siendo la condición verdadera solamente si el valor introducido es del tipo de la variable. Por ejemplo:

cin_7

Explicación

cin_8

atras2

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s