PDF de programación - Entrada / Salida de Entrada / Salida de Datos en C++

Imágen de pdf Entrada / Salida de Entrada / Salida de Datos en C++

Entrada / Salida de Entrada / Salida de Datos en C++gráfica de visualizaciones

Publicado el 2 de Mayo del 2018
370 visualizaciones desde el 2 de Mayo del 2018
196,0 KB
7 paginas
Creado hace 16a (11/04/2003)
Entrada / Salida de
Entrada / Salida de

Datos en C++
Datos en C++

Informática II
Informática II

Fundamentos de Programación
Fundamentos de Programación

Escuela Superior de Ingenieros de San Sebastián -- TecnTecnunun
Escuela Superior de Ingenieros de San Sebastián

1

Entrada/Salida de datos en C++
Entrada/Salida de datos en C++
• Basadas en “clases” y en la “herencia” (fáciles de extender y modificar).
• Flujo o stream: dispositivo que produce o consume información

– Un flujo está siempre ligado a un dispositivo físico
– Todos los flujos se comportan de forma análoga
– Flujos abiertos en todo programa:

• cin:
• cout:
• cerr:

entrada estándar (teclado)
salida estándar (pantalla)
salida de mensajes de error (pantalla)

• C++ dispone de dos jerarquías de clases:

– De bajo nivel: streambuf (para usuarios más avanzados)
– De alto nivel: istream, ostream y iostream, que derivan de ios
– Estas clases disponen de variables y métodos para controlar los flujos de entrada y salida

ios

istream

ostream

ifstream
istrstream

ofstream
ostrstream

streambuf

filebuf
strstreambuf
stdiobuf

iostream

fstream
strstream
stdiostream

Escuela Superior de Ingenieros de San Sebastián -- TecnTecnunun
Escuela Superior de Ingenieros de San Sebastián

2

enum {

};
skipws:
left:
rigth:
internal:
dec:
oct:
hex:
showbase:
showpoint:
uppercase:
showpos:
scientific:
fixed:
unitbuf:

se descartan los blancos iniciales a la entrada
la salida se alinea a la izquierda
la salida se alinea a la derecha
se alinea el signo y los caracteres de base a la izda y las cifras a la dcha
salida decimal para enteros (defecto)
salida octal para enteros
salida hexadecimal al para enteros
se muestra la base de los valores numéricos
se muestra el punto decimal
los caracteres de formato aparecen en mayúsculas
se muestra el signo (+) en los valores positivos
notación científica para coma flotante
notación normal para coma flotante
salida sin buffer (se vuelca cada operación)

Entrada/Salida con formato
Entrada/Salida con formato



Indicadores: variables miembro enum de tipo long que controlan el formato al activarse o
desactivarse alguno de sus bits. Su valor hexadecimal y su significado es:

skipws=0x0001,
oct=0x0020,
showpos=0x0400,

rigth=0x0004,
left=0x0002,
hex=0x0040,
showbase=0x0080,
scientific=0x800, unitbuf=0x2000,

internal=0x0008,
showpoint= 0x0100,
uppercase=0x0200

dec=0x0010,
fixed=0x1000,

• Existen unos indicadores adicionales (adjustfield, basefield y floatfield) que actúan como

combinaciones de los anteriores.

Escuela Superior de Ingenieros de San Sebastián -- TecnTecnunun
Escuela Superior de Ingenieros de San Sebastián

3

Activar y desactivar indicadores
Activar y desactivar indicadores

• Activación de indicadores: método setf() de ios:

– Su prototipo es:

long setf(long indic);

el valor de retorno es la configuración anterior; indic es el long que contiene los indicadores
que se deesean establecer

– Se permite activar varios indicadores a la vez con el operador OR binario. Ejemplo:

cout.setf(ios::showpoint | ios::fixed)

– es necesario determinar el flujo afectado (cout) y la clase del indicador (ios)
Para desactivar los indicadores se utiliza la función unsetf() de modo similar a setf()

• La función flags() devuelve un long con la configuración de todos los indicadores:

– Su prototipo es:

long flags();

– Existe otra definición que permite cambiar todos los indicadores a la vez pasando un long

como argumento:

long flags(long indic);

el valor de retorno es un long con la configuración anterior

• La función setf() cambia sólo los indicadores que se le pasan como argumentos,

mientras que flags() cambia la configuración por completo

Escuela Superior de Ingenieros de San Sebastián -- TecnTecnunun
Escuela Superior de Ingenieros de San Sebastián

4

Funciones width()
Funciones

width(), , precision()

precision() y y fill()
fill()







Función miembro width(): establece la anchura de campo mínima para un dato de salida
– Su prototipo es:

int width(int n);

donde el valor de retorno es la anchura anterior.

– La anchura establecida es la mínima. Siempre que sea necesario el sistema la aumenta de modo automático.
Función miembro precision(): establece el número de cifras para un dato de salida
– Su prototipo es:

int precision(int n);

donde el valor de retorno es la precisión anterior.

– La precisión por defecto es 6 dígitos.
Función miembro fill(): establece el carácter de relleno para un dato de salida
– Su prototipo es:

char fill(char ch);

donde el valor de retorno es el carácter de relleno anterior.

– Por defecto el carácter de relleno es el blanco ‘ ‘.
El efecto de precision() y fill() es permanente. width() debe ser llamada para cada dato..


#include <iostream.h>
void main()
{

double coef[]={5198.0,3.21,46.32,506.5};
char *prov[] ={"Madrid","Guipuzcoa",
"Cantabria","Alava"};

//salida alineados
const int formato = ios::fixed | ios::left;
cout.flags(formato);
cout.fill('.');
for (int i=0;i<sizeof(coef)/sizeof(double);i++){

//carac. relleno

cout.width(15);
cout << prov[i];
cout.unsetf( ios::left);//suprime just. izq.
cout.width(10);

//ancho para cantidades

//ancho para texto

//escribe texto

cout.precision(2); //2 decimales
cout << coef[i] << endl;
cout.setf(ios::left);

}
cout.unsetf(ios::left);
cout.setf(ios::scientific|ios::right );
cout.width(25);
//ancho para texto
cout << coef[0]<<endl;

}//fin de main

Ejercicio 1

Escuela Superior de Ingenieros de San Sebastián -- TecnTecnunun
Escuela Superior de Ingenieros de San Sebastián

5

Manipuladores de entrada/salida
Manipuladores de entrada/salida

• Los manipuladores son una alternativa a los indicadores. Se pueden introducir en la

propia sentencia de entrada o salida
– Los manipuladores pueden tener argumentos o no tenerlos. Si los tienen hay que incluir el

fichero iomanip.h

– Un manipulador sólo afecta al flujo (cin, cout, etc.) al que se aplica

• El manipulador setiosflag() equivale al indicador setf(), y unsetiosflag() equivale a

unsetf()

• Algunos manipuladores de entrada/salida

– dec, hex y oct: Establecen base para enteros
– ws: se saltan los blancos iniciales
– endl: se imprime un ‘\n’ y se vacía el buffer de salida
– flush: se vacía el buffer de salida
– setw(int w): establece la anchura mínima de campo (sólo para el siguiente dato)
– setprecision(int p): establece el número de cifras
– setfill(char ch): establece el carácter de relleno

• Ejemplos de uso de los manipuladores:

cout << hex << 100;
cout << setw(10) << mat[i][j] << endl;

• El efecto de los manipuladores permanece en el flujo correspondiente hasta que se

cambian con otro manipulador (excepto setw())

Escuela Superior de Ingenieros de San Sebastián -- TecnTecnunun
Escuela Superior de Ingenieros de San Sebastián

6

Entrada/Salida de ficheros
Entrada/Salida de ficheros





Los ficheros se utilizan para la lectura y/o escritura de datos en unidades de almacenamiento
permanente como los disquetes, discos duros, etc.
Las clases necesarias para la utilización de ficheros son ifstream, ofstream y fstream, que derivan
de istream y ostream, que a su vez derivan de la clase ios (ver figura). Para utilizarlas se debe
incluir el fichero <fstream.h>.

• Antes de abrir un fichero hay que crear un flujo o stream, es decir un objeto de las clases

ifstream, ofstream o fstream e indicar el modo de apertura (lectura, escritura, …).

• Clase ofstream:

– Es una clase derivada de ostream, especializada en manipular ficheros en el disco abiertos para escribir.
– Al construir un objeto de esta clase, el constructor lo conecta automát. con un objeto filebuf (un buffer).
– La funcionalidad de esta clase está soportada por las siguientes funciones miembro, entre otras:

• ofstream( const char *nombre_fichero, int modo=ios::out, int proteccion=filebuf::openprot);
• void open(const char *nombre_fichero, int modo=ios::out, int proteccion=filebuf::openprot);
• void close();
int is_open();


//esta función cierra el fichero
//verifica si el fichero está abierto(=1). Si no lo está devuelve un 0.

char file[]="Prueba.txt";
ofstream fout(file);
if (!fout) cerr<<"No se puede abrir "<<file;
cout << "Fichero "<< file << " abierto bien"
fout.close();

char file[]="Prueba.txt";
ofstream fout;
fout.open(file);
if (!fout) cerr<<"No se puede abrir "<< file;
cout << "Fichero "<< file << " abierto bien";
fout.close();

• Para escribir en el fichero se utiliza el operador de inserción “<<“ sobrecargado. Para leer del fichero se usa el
operador de extracción “>>”. Esta forma de Escritura es sólo en formato texto.
• El Ejercicio 1 (slide 5) sustituir cout por fout. El efecto es el mismo, sólo que en un fichero.

Escuela Superior de Ingenieros de San Sebastián -- TecnTecnunun
Escuela Superior de Ingenieros de San Sebastián

7

Entrada/Salida de ficheros
Entrada/Salida de ficheros

• Clase ifstream:

buffer).

– Es una clase derivada de istream, especializada en manipular ficheros en el disco abiertos para leer.
– Al construir un objeto de esta clase, el constructor lo conecta automáticamente con un objeto filebuf (un

– La funcionalidad de esta clase está soportada por las siguientes funciones miembro, entre otras:

ifstream( const char *nombre_fichero, int modo=ios::in, int proteccion=filebuf::openprot);

• void open(const char *nombre_fichero, int modo=ios::in, int proteccion=filebuf::openprot);
• void close();
int is_open();

#include <fstream.h>
void main()
{

//esta función cierra el fichero
//verifica si el fichero está abierto(=1). Si no lo está devuelve un 0.

int x=20;
char file[]="Prueba.txt";
ofstream file1(file);
if (!file1) cerr << "No se puede abrir " << file;
cout << "Fichero "<< file << " abierto bien" <<endl;
file1 << "Hola" << endl << "Me despido " << "Adios ";
file1 << hex << x;
file1.close();

char tmp[120];
ifstream file2(file);
if (!file2) { cerr << "No se puede abrir " << file; return;}
cout << "Vamos a leer de " << file << endl;
while(!file2.eof(
  • Links de descarga
http://lwp-l.com/pdf10798

Comentarios de: Entrada / Salida de Entrada / Salida de Datos en C++ (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad