View
225
Download
0
Embed Size (px)
Citation preview
1
Informática IISesión 08: Flujo de datos
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
ContenidoContenido
2
Introducción1
Entrada y Salida de archivos2
3 Argumentos de línea de comandos
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
IntroducciónIntroducción
3
El almacenamiento de datos en las variables de nuestros programas es temporal. Al terminar todos los datos se pierden.
Para la conservación permanente de grandes datos: Se utilizan el almacenamiento en archivos
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
IntroducciónIntroducción
4
C++ ve cada uno de los archivos como: Flujo secuencial de bytes.
hola mundo 68 6F 6C 61 20 6D 75 6E 64 6F
Mensaje Mensaje en C++
0 1 2 3 4 5
…
… n-1
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
IntroducciónIntroducción
5
Cada archivo termina con un marcador de fin de archivo o de un número específico de bytes.
Al empezar la ejecución de un programa automáticamente se abren tres entornos y sus flujos asociados: Entrada estándar: Permite que un programa lea
datos por teclado. Salida estándar: permite que un programa imprima
datos en la pantalla. Error estándar: Indicador de errores.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
IntroducciónIntroducción
6
Capturar
Leer Guardar
Visualizar
Los flujos proporcionan canales de comunicación entre los archivos y los programas
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
IntroducciónIntroducción
7
De manera estricta, C++ no define directamente una forma de escribir datos en la pantalla o en archivos ni cómo leerlos del teclado.
Entonces quién provee esta funcionalidad esencial? Ésta es provista por bibliotecas de entrada y salida
E/S.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
IntroducciónIntroducción
8
Recordemos: Biblioteca es una colección de archivos objeto que
se pueden enlazar con nuestro código para incrementar su funcionalidad.
Ventaja: Se pueden escribir programas independientes de
plataforma, por lo menos en teoría.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
ContenidoContenido
9
Introducción1
Entrada y Salida de archivos2
3 Argumentos de línea de comandos
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia10
Jerarquía StreamJerarquía Stream
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
•Clase derivada de ambas istream y ostream que provee funciones para escribir en pantalla y métodos de entrada.
iostream•Clase
que permite manipular buffers de flujos.
streambuf
•Clase que provee funcionalidad de entrada y salida sobre archivos.
fstream
11
Librería Input/Output StreamLibrería Input/Output Stream
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Entrada y Salida de archivosEntrada y Salida de archivos
12
iostream
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
iostreamiostream La librería iostream abstrae el problema del ingreso y
salida de datos, modelando la entrada-salida como flujos de bytes, en serie uno tras otro, tanto de entrada como de salida.
Cuando incluimos la librería iostream, se crean e inicializan cuatro objetos estándar.
13
cin manipula la entrada estándar, el teclado.
cout manipula la salida estándar, la pantalla.
cerr manipula salida sin buffer al dispositivo estándar de error, la pantalla.
clog manipula salida con buffer al dispositivo estándar de error.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
iostreamiostream
14
1
•Encapsula el problema con operadores de extracción e inserción de flujo.
2
•operador de inserción << , el flujo es de salida.
3
•operador de extracción, >> , el flujo es de entrada
4
•Encapsula los detalles técnicos dependientes de la plataforma.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Objeto cin IstreamObjeto cin Istream cin
Es un objeto global Responsable de las entradas por teclado Disponible al incluir la librería iostream a su programa. operador de extracción >> es sobrecargado
cout Es un objeto global Responsable de mostrar en pantalla Disponible al incluir la librería iostream a su programa. operador de inserción << es sobrecargado.
15
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Entrada y Salida de archivosEntrada y Salida de archivos
16
streambuf
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
BuffersBuffers Escribir o leer datos en el disco y en menor
medida en la pantalla, es lento respecto a la velocidad del procesador.
Para resolver esto se pueden usar buffers, almacenamiento de memoria temporal que se llenan desde el programa sin tener que detener la ejecución hasta que se escriba dato por dato, y pueden ser vaciados independientemente por el sistema de salida.
17
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
BuffersBuffers Aplicaciones:
Buffer de teclado: memoria intermedia en la que se van almacenando los caracteres que un usuario teclea.
Buffer de Audio o video: streaming por Internet. Buffer grabadoras de DVD: tienen un buffer para que
no se pare la grabación.
Ejemplo análogo, tanque con válvulas de entrada y salida.
18
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
streambufstreambuf La librería streambuf proporciona el interfaz
entre los datos y las áreas de almacenamiento como la memoria o los dispositivos físicos.
Sin embargo las aplicaciones necesitan acceder al buffer de un stream, lo hacen a través del puntero almacenado en la clase ios. acceso desde funciones superiores (ios) y sus clases
derivadas, y casi nunca directamente a través de streambuf.
19
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Entrada y Salida de archivosEntrada y Salida de archivos
20
fstream
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
fstreamfstream La libreria fstream proporciona una interfaz
para leer y escribir datos a partir de flujos de entrada y salida de archivos.
Los objetos de esta clase mantiene internamente un puntero a un objeto tipo filebuf. La clase filebuf se basa en la clase streambuf, y le
proporciona las funciones necesarias para manipular entrada y salida de caracteres en ficheros.
21
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
fstreamfstream Las clases que nos da C++ para el acceso a
ficheros de texto son:
ifstream: clase disponible para leer del archivo ( i de input, f de file y stream).
ofstream: clase para escribir (o de output, f de file y stream).
fstream: sirve para las ambas tareas, lectura y escritura.
22
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
fstreamfstream Algunos parametros que podemos usar dentro
de las clases fstream: app (append): Para añadir al final del fichero binary (binary) Se abre el fichero como fichero
binario. in (input) El fichero se abre para lectura. out (output) El fichero se abre para escritura trunc (truncate) Si el fichero existe, se ignora su
contenido y se empieza como si estuviera vacio.
23
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Abrir Archivo Modo LecturaAbrir Archivo Modo Lectura La apertura del fichero se puede hacer pasando
parámetros al declarar la variable de estos tipos, o bien declarando la variable sin parámetros y luego llamando al método open().
24
ifstream variable(“NombreArchivo");
ifstream variable;variable.open();
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Abrir ArchivosAbrir Archivos
25
#include <iostream>
#include <fstream>
using namespace std;
int main (void) {
char cadena[128];
//Abre un fichero de entrada
ifstream fe("nombre.txt");
fe.getline(cadena, 128);
cout << cadena << endl;
fe.close();
return 0;
}
#include <iostream>
#include <fstream>
using namespace std;
int main (void) {
char cadena[128];
//Abre un fichero de entrada
ifstream fe("nombre.txt");
while(!fe.eof()){
fe >> cadena;
cout << cadena << endl;
}
fe.close();
return 0;
}
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Abrir Archivo Modo Escritura Abrir Archivo Modo Escritura La apertura del fichero se puede hacer pasando
parámetros al declarar la variable de estos tipos, o bien declarando la variable sin parámetros y luego llamando al método open().
26
ofstream variable(“NombreArchivo");
ofstream variable;Variable.open();
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Abrir ArchivosAbrir Archivos
27
#include <iostream>
#include <fstream>
using namespace std;
int main (void) {
// Crea un fichero de salida
ofstream fs("nombre.txt");
fs << "Hola mundo" << endl;
fs.close();
return 0;
}
#include <iostream>
#include <fstream>
using namespace std;
int main (void) {
// Crea un fichero de salida
ofstream fs("nombre.dat");
fs .write(“Hola Mundo”,20);
fe.close();
return 0;
}
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Abrir Archivo Aleatoriamente Abrir Archivo Aleatoriamente Los ejemplo mostrados leen o a escriben desde
el principio, y avanzan a medida que se lee o se escribe en ellos. Entonces como hacemos para poder hacer lecturas o
escrituras en cualquier punto del fichero??
Para eso disponemos de las funciones: seekp: cambia la posición en la siguiente escritura. seekg: cambia la posición en la siguiente lectura. tellp: indica la posición en la que nos encontramos. tellg: indica la posición del fichero en la que nos
encontramos.
28
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Abrir Archivo Aleatoriamente Abrir Archivo Aleatoriamente Algunos parametros que podemos usar detro de
estas funciones: ios::beg solicitar desplazamiento respecto al
principio del archivo ios::cur solicitar desplazamiento respecto a la
posición actual dentro del archivo ios::end solicitar desplazamiento respecto al final del
archivo
29
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Abrir ArchivosAbrir Archivos
30
#include <iostream>#include <fstream>using namespace std; int main() { int i, pos; char mes[][20] = {“Ene", “Feb“,
“Mar“,"Abr","May“,"Jun“,"Jul","Ago“, "Sep“,"Oct“,"Nov“,"Dic"};
char cad[20]; ofstream fsalida("meses.dat"); cout << "Crear archivo de nombres de
meses:" << endl; for(i = 0; i < 12; i++) fsalida.write(mes[i], 20); fsalida.close();
ifstream fentrada("meses.dat");cout << "\nAcceso1" << endl;fentrada.read(cad, 20);do { cout << cad << endl; fentrada.read(cad, 20);} while(!fentrada.eof());fentrada.clear();
cout << "\nAcceso2:" << endl;for(i = 11; i >= 0; i--) { fentrada.seekg(20*i); fentrada.read(cad, 20); cout << cad; pos = fentrada.tellg(); cout << " - " << pos/20 <<
endl; }return 0;}
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Abrir Archivo Modo E/S Abrir Archivo Modo E/S Es posible trabajar con un stream
simultáneamente en entrada y salida.
La clase fstream: derivada de ifstream y ofstream, dispone de todas las funciones necesarias para
realizar cualquier operación de entrada o salida.
31
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Abrir ArchivosAbrir Archivos
32
#include <iostream>#include <fstream>using namespace std;int main() { char l; long i, lon; fstream fich("prueba.dat", ios::in | ios::out | ios::trunc |
ios::binary); fich << "abracadabra"; fich.seekg(0, ios::end); lon = fich.tellg();
cout << "Salida:" << endl; fich.seekg(0); for(i = 0; i < lon; i++) { fich.get(l); cout << l; } cout << endl; fich.close(); return 0;}
for(i = 0; i < lon; i++) { fich.seekg(i); fich.get(l); if(l == 'a') { fich.seekp(i); fich << 'e'; }}
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Comprobación de ArchivosComprobación de Archivos Cuando estemos trabajando en la manipulación
de archivos, en ocasiones se hace necesario visualizar el estado en el que se encuentren.
Podemos hacer uso de las banderas: good(): si el stream con el que estamos trabajando está en un
estado de error. fail(): Devuelve true si la lectura o la escritura operación falla o
en el caso de que ocurra un error de formato. bad(): Devuelve true si la lectura o la escritura operación falla. clear(): Elimina el estado de error eof(): Devuelve true si un archivo abierto para la lectura ha
llegado al final.
33
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Ifstream y OfstreamIfstream y Ofstream Cuando se crea un flujo de archivo de salida, el
comportamiento predeterminado es: Se crea uno nuevo si no existe Se trunca, borra y sobre-escribe si el archivo ya
existe.
Este modo se puede modificar Para agregar al archivo original (append) Para no crear un archivo nuevo, en este caso si el
archivo no existe la apertura falla.
34
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Tips para el manejo de ArchivosTips para el manejo de Archivos
1
•Chequee todos los archivos que se abren para verificar que se abrieron exitosamente.
2
•Reutilice objetos ifstream y ofstream existentes.
3
•Cierre todos los fstream cuando termine de usarlos.
35
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
ContenidoContenido
36
Flujos1
Librería Input/Output Stream2
3 Argumentos de línea de comandos
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Para recibir argumentos en el programa Principal
Para recibir argumentos en el programa Principal
Los argumentos estan separados por espacios incluyendo el nombre
del programa.
algunPrograma arg1 arg2
El nombre del programa es el primer argumento.
37
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Para usarlo declare main con argumentos int argc -Contador de argumentos char* argv[] -Vector de argumentos
38
Para recibir argumentos en el programa Principal
Para recibir argumentos en el programa Principal
Los nombres son convención pero pueden cambiar siempre y cuando se conserven los tipos y el orden.
• Son equivalentes: char**, char*[], char[][].
• argv[0] es el nombre del programa, y argv[1] es el primer parámetro del programa.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia39
Para recibir argumentos en el programa Principal
Para recibir argumentos en el programa Principal
#include <iostream>using namespace std;int main(int argc, char *argv[]) { cout << "Received " << argc << " arguments...\n";
for (int i=0; i<argc; i++){ cout << "argument " << i << ": " << argv[i] << endl;
}return 0;}
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia40
GRACIAS POR SU ATENCIÓN
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
BibliografíaBibliografía Pagina de Referencia lenguaje C++: http://www.cplusplus.com/reference/iostream/ http://newdata.box.sk/bx/c/htm/ch16.htm#Headin
g49 Sams Teach yourselft C++ in 21 days:
http://newdata.box.sk/bx/c/htm/ch20.htm#Heading1
41
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
AnexoAnexo
Informática II 2011/2 42
cin1
cout2
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
cin.get() con referencia a carácter: Cuando una referencia a carácter (variable) se le
pasa a cin.get(), esta se llena con el siguiente carácter en el flujo de entrada.
Nuevamente es posible concatenar
43
Objeto cin IstreamObjeto cin Istream
#include <iostream> using namespace std; int main() { char a, b, c; cout << "Enter three letters: "; cin.get(a).get(b).get(c); cout << "a: " << a << "\nb: " << b << "\nc: " << c << endl; return 0; }
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Tips uso de CinTips uso de Cin Use el operador de extracción (>>) cuando necesite saltar espacios en blanco.
Use cin.get() si necesita examinar todos los caracteres incluyendo los espacios en blanco.
44
#include <iostream> using namespace std;
int main() { char stringOne[256]; char stringTwo[256];
cout << "Enter string one: "; cin.get(stringOne,256); cout << "stringOne: " << stringOne << endl;
cout << "Enter string two: "; cin >> stringTwo; cout << "StringTwo: " << stringTwo << endl; return 0; }
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
cin.getline(): hace lo mismo que cin.get()Se diferencia en que cin.getline() elimina el terminador de la cadena.
45
Tips uso de CinTips uso de Cin #include <iostream> using namespace std;
int main() { char stringOne[256]; char stringTwo[256]; char stringThree[256];
cout << "Enter string one: "; cin.getline(stringOne,256); cout << "stringOne: " << stringOne << endl;
cout << "Enter string two: "; cin >> stringTwo; cout << "stringTwo: " << stringTwo << endl;
cout << "Enter string three: "; cin.getline(stringThree,256); cout << "stringThree: " << stringThree << endl; return 0; }
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
cin.ignore() se usa para limpiar el flujo de entrada, ignorando el numero de caracteres especificados hasta encontrar el terminador especificado.
46
Tips uso de CinTips uso de Cin#include <iostream>using namespace std;
int main(){ char stringOne[255]; char stringTwo[255];
cout << "Enter string one:"; cin.getline(stringOne,255); cout << "String one" << stringOne << endl; cout << "Enter string two: "; cin.getline(stringTwo,255); cout << "String two: " << stringTwo << endl;
cout << "\n\nNow try again...\n";
cout << "Enter string one: "; cin.getline(stringOne,255); cout << "String one: " << stringOne<< endl;
cin.ignore(255,'\n'); cout << "Enter string two: "; cin.getline(stringTwo,255); cout << "String Two: " << stringTwo<< endl;
return 0;}
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
cin.peek() : Permite acceder al buffer permitiendo ver su interior
sin necesidad de cargar el carácter en otra variable
cin.putback(): Permite acceder al buffer y modificar el carácter de
turno.
47
Tips uso de CinTips uso de Cin#include <iostream>using namespace std;
int main(){ char ch; cout << "enter a phrase: "; while ( cin.get(ch) ) { if (ch == '!') cin.putback('$'); else cout << ch; while (cin.peek() == '#') cin.ignore(1,'#'); }return 0;}
Estos dos últimos métodos resultan útiles porque permiten mirar los caracteres y dejarlos en el flujo de entrada.Este tipo de trucos se usan cuando se pasa texto a otro tipo de datos. Por ejemplo, en un compilador.
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
AnexoAnexo
48
cin1
cout2
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia49
Objeto cout OstreamObjeto cout Ostream•flush(): Escribe todo lo que haya en el buffer en la pantalla. endl llama a flush() automáticamente.Este método es conveniente cuando se debe estar seguro que el buffer esta vacio y sus contenidos son mostrados en pantalla.
•put(): Imprime un solo carácter en pantalla, también se puede concatenar.
cout<<flush;cout.flush();cout<<endl;
#include <iostream>using namespace std;
int main(){ cout.put('H').put('e').put('l').put('l').put('o').put('\n'); return 0; }
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
write(): Imprime un arreglo de caracteres hasta donde se le indique. Es similar al operador inserción (<<).
50
Objeto cout OstreamObjeto cout Ostream#include <string.h> #include <iostream> using namespace std;
int main(){ char One[] = "One if by land";
int fullLength = strlen(One); int tooShort = fullLength -4; int tooLong = fullLength + 6;
cout.write(One,fullLength) << "\n"; cout.write(One,tooShort) << "\n"; cout.write(One,tooLong) << "\n"; return 0;}
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
width():El espacio por defecto de la salida es apenas suficiente para imprimir el carácter en la salida.
width() Genera un espacio en el buffer entre caracteres. Este solo cambia el ancho de la salida próxima y luego inmediatamente vuelve a su valor por defecto.
51
Objeto cout OstreamObjeto cout Ostream #include <iostream> using namespace std; int main() { cout << "Start >"; cout.width(25); cout << 123 << "< End\n";
cout << "Start >"; cout.width(25); cout << 123<< "< Next >"; cout << 456 << "< End\n";
cout << "Start >"; cout.width(10); cout << 123456 << "< End\n";
return 0; }
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
fill(): Normalmente cout llena los campos vacios creados por width() con espacios. fill() llena un espacio establecido con un carácter definido.
52
Objeto cout OstreamObjeto cout Ostream
#include <iostream>using namespace std;
int main(){ cout << "Start >"; cout.width(25); cout << 123 << "< End\n";
cout << "Start >"; cout.width(25); cout.fill('*'); cout << 123 << "< End\n";return 0;}
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática II Universidad de Antioquia
Banderas del IostreamBanderas del Iostream Usted puede acceder a dichas banderas con el
método o manipulador setf(), y llevando como argumento las siguientes constantes puede dar formato a la salida en pantalla:
53
•ios::showpoint•ios::showpos•ios::dec•ios::oct•ios::hex•ios::left•ios::right• ios::internal.
int main() { const int number = 185; cout << "The number is " << number << endl;
cout << "The number is " << hex << number << endl;
cout.setf(ios::showbase); cout << "The number is " << hex << number << endl;
cout << "The number is " ; cout.width(10); cout << hex << number << endl;
cout << "The number is " ; cout.width(10); cout.setf(ios::left); cout << hex << number << endl;
cout << "The number is " ; cout.width(10); cout.setf(ios::internal); cout << hex << number << endl;
cout << "The number is:" <<
setw(10)<<hex<<number<<endl; return 0; }También se puede concatenar con el operador de
inserción.
El metodo setw() es otro manipulador que permite establecer el ancho entre caracteres impresos.