BUSCAR
INDICE
INDICE DEL TEMA
OBJETIVOS
TEORIA
PALABRAS RESERVADAS
GLOSARIO
EJERCICIOS
RESUELTOS
AUTOEVALUACION
PROPUESTOS
ERRORES
ESTADISTICAS
INICIO
FAQS
LINKS
RECOMIENDANOS
QUIENES SOMOS
MAPA DEL WEB
COLABORAR
Tema 21 Entrada / Salida en C++
Teoría: Entrada / Salida con formato

Ya se ha visto que C++ dispone de unas herramientas propias de entrada y salida de datos basadas en clases y en la herencia que son fáciles de extender y modificar. Si este tema no se ha visto anteriormente con más extensión, es porque conviene haber visto la herencia para entenderlo correctamente.

Es necesario recordar aquí el concepto de stream o flujo, que se puede definir como dispositivo que produce o consume información. Un flujo está siempre ligado a un dispositivo físico. Todos los flujos, independientemente del dispositivo físico al que se dirijan (disco, monitor…,) se comportan de forma análoga.

Al ejecutarse un programa en C++ se abren automáticamente los flujos siguientes:

cin: entrada estándar (teclado)
cout: salida estándar (pantalla)
cerr: salida de mensajes de error (pantalla)

C++ dispone de dos jerarquías de clases para las operaciones de entrada/salida: una de bajo nivel, streambuf, que no se va a explicar porque sólo es utilizada por programadores expertos, y otra de alto nivel, con las clases: istream, ostream e iostream, que derivan de la clase ios. Estas clases disponen de variables y métodos para controlar los flujos de entrada y salida (ver la jerarquía de clases de entrada/salida en la figura 8, un poco más adelante).

Entrada/salida con formato. Cada flujo de C++ tiene asociados unos indicadores, que son unas variables miembro enum de tipo long que controlan el formato al activarse o desactivarse alguno de sus bits. Su valor hexadecimal
es:

enum {

skipws=0x0001, left=0x0002, rigth=0x0004, internal=0x0008,
dec=0x0010, oct=0x0020 hex=0x0040, showbase=0x0080,
showpoint= 0x0100 uppercase=0x0200, showpos=0x0400, scientific=0x800, fixed=0x1000, unitbuf=0x2000

};


Su significado es el siguiente:

skipws: se descartan los blancos iniciales a la entrada
left: la salida se alinea a la izquierda
rigth: la salida se alinea a la derecha
internal: se alinea el signo y los caracteres indicativos de la base por la
izquierda y las cifras por la derecha
dec: salida decimal para enteros (defecto)
oct: salida octal para enteros
hex:salida hexadecimal al para enteros
showbase: se muestra la base de los valores numéricos
showpoint:
se muestra el punto decimal
uppercase: los caracteres de formato aparecen en mayúsculas
showpos: se muestra el signo (+) en los valores positivos
scientific: notación científica para coma flotante
fixed: notación normal para coma flotante

unitbuf: salida sin buffer (se vuelca cada operación)

stdio permite compatibilizar entrada/salida al modo de C con <stdio.h> y almodo de C++ con <iostream.h>

La forma de definir las constantes anteriores permite componerlas fácilmente, guardando toda la información sobre ellas en una única variable long. Existen unos indicadores adicionales (adjustfield, basefield y floatfield) que actúan como combinaciones de los anteriores (máscaras):

  • adjustfield es una combinación excluyente (sólo una en on) de left, rigth e internal

  • basefield es una combinación excluyente (sólo una en on) de dec, oct e hex

  • floatfield es una combinación excluyente (sólo una en on) de scientific y fixed
    Por defecto todos los indicadores anteriores están desactivados, excepto skipws y dec.