Sesión 08: Flujo de datos 1. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad.

Slides:



Advertisements
Presentaciones similares
Tema #10. FICHEROS.
Advertisements

Unidad 15 Características de C++ no relacionadas con el DOO.
Abstracción de Datos Arrays.
FICHEROS.
Informática II Clase 12: Flujos Diego Fernando Serna Restrepo
Listas enlazadas c++ Prof. Franklin Cedeño.
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Fundamentos de la Programación Estructurada
Programación, Algoritmos y Estructuras de Datos
Funciones. Programación, Algoritmos y Estructuras de Datos.
Informática II Prof. Dr. Gustavo Patiño MJ
1.2 Sintaxis del lenguaje Java.
Introducción al lenguaje C++
Programación en Lenguaje Ensamblador.
Planificación de la Información.
PROGRAMACIÓN ORIENTADA A OBJETOS
Unidad 3 Punteros.
La estructura básica de los programas en java, algo a tener en cuenta y que debemos recordar siempre es el archivo debe llevar el nombre de la clase con.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Unidad I Java y C++ : Similitudes y diferencias
Archivos Programación.
Informática Ingeniería en Electrónica y Automática Industrial
Asignatura: Lenguaje de Programación de Sistemas PPT No.05 Programa vespertino de Ingeniería (E) en Sistemas Computacionales Profesor: José Estay Araya.
Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*
PROGRAMACION II.  Es un conjunto de datos no necesariamente del mismo tipo, los cuales se podrán manipular o realizar cualquier operación sobre cada.
Semana 5 Subprogramas..
Archivos.
Programación I Teoría VIII: Entrada/Salida
Informática Ingeniería en Electrónica y Automática Industrial
Tema 10a Manejo de archivos. Introducción Un computador puede almacenar grandes cantidades de información. Puede acceder a ella de manera muy rápida.
Clase 10: Estructuras de datos y arreglos.
Valor X Valor Y Punto (0,0) Coordenadas.
Streams. / En casi todo programa se necesita traer o enviar información a una fuente externa. / Dicha información puede estar en un archivo en el disco.
Computación II Unidad IX Flujos y archivos. Presentación de la unidad Objetivos: –Comprender como utilizar el flujo de entrada y salida en C++ –Comprender.
Resolución de Problemas y Algoritmos Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Bahía Blanca - Argentina.
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
Introducción a los punteros Prof. Domingo Hernández.
Archivos.
Archivos Programación I MC Beatriz Beltrán Martínez.
Elementos básicos del lenguaje
Unidad II Introducción a la programación en C++
Entrada y salida Gestión de ficheros.
Programación en C para electrónicos
1 Unidad IV Archivos en Java y C++ M.C. Juan Carlos Olivares Rojas.
Elementos básicos del lenguaje
Entrada / Salida Streams Archivos Algoritmos y Estructuras de Datos I Departamento de Computación, Facultad de Ciencias Exactas y Naturales, Universidad.
Entrada / Salida Streams Archivos Algoritmos y Estructuras de Datos I Departamento de Computación, Facultad de Ciencias Exactas y Naturales, Universidad.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
Teoría de Sistemas Operativos Sistema de I/O. 2 Introducción Una de las funciones principales del sistema operativo es el control de todos los dispositivos.
Sesión 10: Sobrecarga (2) /1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
PRINCIPIOS DE PROGRAMACIÓN
Computación I. CI-2125 Tema VIII
Algoritmo.
CONALEP 104 METODO MAP  VANESSA IXBA MARTINEZ MATERIA: PROGRAMACION ORIENTADA A OBJETOS MAESTRA: LIC. Ma. TERESA QUINO DELGADO GRUPO: 4104 CUARTO SEMESTRE.
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Desarrollador Profesional de Juegos Programación III Unidad II Trabajando con bloqueo de datos.
Ficheros: Ruby Estructura de Datos II.
Lenguaje de Programación II PLAN DE EVALUACIÓN CONTENIDO MODALIDAD DE EVAL. PONDERACIÓN INTRODUCCIÓN BÁSICA AL LENGUAJE DE PROGRAMACIÓN.
Visual Basic Prof.: Carol Briones García. Uso de Archivos  Definición  Es un conjunto de información que se almacena en algún medio de escritura que.
Archivos. Introducción Los datos que hemos tratado hasta el momento han residido en la memoria principal. Sin embargo, las grandes cantidades de datos.
Manejo de archivos de texto.  Unidad fundamental de almacenamiento dentro del ámbito de la informática. Alberga un conjunto de datos que es posible leer,
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
Entrada y Salida en C++, Estructuras de Control Prof. Manuel B. Sánchez.
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
PROYECTO PYTHON INTEGRANTES DEL EQUIPO: NAVA CASTILLO CYNTHIA PAOLA VÁZQUEZ ORTEGA FELYBIER.
Archivos binarios en C++
Transcripción de la presentación:

Sesión 08: Flujo de datos 1

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Contenido 2 Introducción 1 Entrada y Salida de archivos 2 3 Argumentos de línea de comandos

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Introducció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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Introducción 4  C++ ve cada uno de los archivos como:  Flujo secuencial de bytes. hola mundo 686F6C61206D756E646F … … n-1

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Introducció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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Introducción 6 Capturar LeerGuardar Visualizar Los flujos proporcionan canales de comunicación entre los archivos y los programas

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Introducció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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Introducció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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Contenido 9 Introducción 1 Entrada y Salida de archivos 2 3 Argumentos de línea de comandos

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 10 Jerarquía Stream

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informá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 Stream

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Entrada y Salida de archivos 12

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia iostream  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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia iostream 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Objeto 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Entrada y Salida de archivos 16

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Buffers  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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Buffers  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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia streambuf  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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Entrada y Salida de archivos 20

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia fstream  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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia fstream  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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia fstream  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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Abrir 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Abrir Archivos 25 #include 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 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Abrir Archivos 27 #include using namespace std; int main (void) { // Crea un fichero de salida ofstream fs("nombre.txt"); fs << "Hola mundo" << endl; fs.close(); return 0; } #include 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Abrir Archivos 30 #include 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Abrir Archivos 32 #include 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Comprobació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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Ifstream 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Tips 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Contenido 36 Flujos 1 Librería Input/Output Stream 2 3 Argumentos de línea de comandos

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informá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 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. Son equivalentes: char**, char*[], char[][]. argv[0] es el nombre del programa, y argv[1] es el primer parámetro del programa.

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 39 Para recibir argumentos en el programa Principal #include 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 40

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Bibliografía  Pagina de Referencia lenguaje C++:   g49 g49  Sams Teach yourselft C++ in 21 days: g1 41

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Anexo Informática II 2011/2 42 cin 1 cout 2

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informá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 Istream #include 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Tips 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 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informá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 Cin #include 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informá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 Cin #include 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informá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 Cin #include 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. 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Anexo 48 cin 1 cout 2

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 49 Objeto 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 using namespace std; int main() { cout.put('H').put('e').put('l').put('l').put('o').put('\n'); return 0; }

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informá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 Ostream #include 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/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informá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 Ostream #include using namespace std; int main() { cout "; cout.width(25); cout << 123 << "< End\n"; cout "; cout.width(25); cout "; cout << 456 << "< End\n"; cout "; cout.width(10); cout << << "< End\n"; return 0; }

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informá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 Ostream #include using namespace std; int main() { cout "; cout.width(25); cout << 123 << "< End\n"; cout "; cout.width(25); cout.fill('*'); cout << 123 << "< End\n"; return 0; }

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Banderas 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.