Sunteți pe pagina 1din 6

Universidad Nacional de Rosario

Facultad de Ciencias Exactas, Ingeniería y Agrimensura


Escuela de Ingeniería Electrónica
Cátedra de Informática II

Entrada y salida de datos en C y C++

Informática II Entrada/Salida Pág. 1


1. Introducción general
Este material debe utilizarse como complemento a la asistencia a las clases de teoría de la
asignatura y sirve principlamente como guía general de estudio y no como referencia
exahustiva de los temas tratados, para los cuales debe recurrirse a la bibliografía indicada:

“El Lenguaje de Programación C”, 2ª edición, Brian Kernighan y Dennis Ritchie, Editorial
Pearson ISBN 9688802050
“El Lenguaje de Programación C++”, 1ª edición, Bjarne Stroustrup, Editorial Pearson, ISBN
847829046X

2. Entrada/Salida en C
1. Introducción
El lenguaje C (y consecuentemente también C++) dispone de una librería para entrada
salida: Standard Input-Output Library que permite ejecutar operaciones básicas de E/S. Las
declaraciones requeridas por esta librería están contenidas en el archivo de encabezado
“stdio.h”, que debe incluírse con la directiva correspondiente:

#include <stdio.h>

Este archivo define tres “streams” estándar: stdin, stdout y stderr, que utilizan entrada y
salida basada en caracteres y son abiertas automáticamente. Por defecto stdin y stderr
están direccionadas a la pantalla, y stdin al teclado.

2. E/S básica en C
Estas operaciones se hacen mediante las funciones getchar() y putchar():
int getchar() – lee un carácter desde stdin
int putchar(char c) – escribe el carácter 'c' en stdout
Se dispone también de otras funciones, tales como getline(), etc.

3. E/S formateada en C
Las funciones printf() y scanf() permiten aplicar formato a los datos de E/S, como por
ejemplo, cantidad de decimales, justificación de texto, conversión a
mayúsculas/minúsculas, numeración hexadecimal, etc. Ambas funciones toman al
menos dos argumentos (pueden ser mas):
1. La cadena de formato
2. Los datos a enviar a la salida, en el caso de printf() o a recibir de la entrada, en el
caso de scanf()

La cadena de formato es un literal encerrado ente comillas dobles (“ y “) precedida de


un símbolo '%'. La tabla siguiente muestra especificadores frecuentemente utilizados:
Especificador Significado
c Un carácter (char)
i,d Número entero (int o double)
x,X Número hexadecimal (0-9 A-F)

Informática II Entrada/Salida Pág. 2


Especificador Significado
s Cadena de caracteres (char *)
f Número de punto flotante (float o double)
m.n M cifras enteras y n decimales
- Ajuste de texto a la izquierda
k Número de cifras de un número entero

La cadena de formato puede incluir literales y caracteres especiales tales como


'\n' Nueva línea
'\t' Tabulación
'\0' Carácter nulo (fin de cadena)

4. Ejemplos printf()
printf(“%-1.3f\n”, 3.1415927);
3.141

printf(“IVA: 21,5%%\n”);
IVA: 21,5%

5. Ejemplos scanf()
En esta función, el primer argumento es la cadena de formato, al igual que en printf(), y
el segundo la dirección de las variables que recibirán los datos:

char string[80];
scanf(``%s'',string);
6.

3. Entrada/salida con Streams en C++


1. Definición: un stream en C++ es un objeto mediante el cual un programa puede insertar
o extraer datos utilizando los operadores de inserción << y de extracción >> o
funciones.
Los datos pueden ser tipos fundamentales (int, char, double, etc.), o cadenas de
caracteres.

2. Streams predefinidos
Por defecto, la salida asignada a un programa es la pantalla, y en C++ está representada
por el stream cout a la que se denomina “salida estándar”. Las definiciones necesarias
para su uso están contenidas en el archivo de encabezamiento iostream. Caracteres,
números y variables pueden insertarse en cout mediante el operador de inserción <<.

Ejemplo:
cout << “Hola!”; // muestra una cadena de texto en la pantalla
cout << 120; // muestra un número en pantalla
cout << x; // muestra el valor de la variable x en pantalla

Informática II Entrada/Salida Pág. 3


El operador de inserción << puede concatenarse:
cout << “Nombre: “ << nom << “ Edad: “ << ed;

Suponiendo que la variable “nom” contenga la cadena “Carla” y la variable “ed”


contenga el entero 23, la salida en pantalla será:
Nombre: Carla Edad: 23

Para separar las líneas en pantalla pueden usarse dos métodos: agregar “\n” o usar el
manipulador endl:
cout << “Nombre: “ << nom << “\n” << “ Edad: “ << ed;
o
cout << “Nombre: “ << nom << endl << “ Edad: “ << ed;

En ambos casos la salida será:


Nombre: Carla
Edad: 23

La “entrada estándar” de un programa C++ es el teclado, y está representado por el


stream cin. El operador de extracción >> permite obtener caracteres o números desde
el teclado:
int temperatura;
cin >> temperatura;

Es importante recordar que cin sólo procesa la entrada desde el teclado una vez que el
usuario pulsó la tecla “Enter”. El tipo de la variable que recibe datos determina cómo se
interpretan los datos ingresados por teclado.

El operador de inserción puede concatenarse, por ejemplo:


cin >> a;
cin >> b;

es equivalente a:
cin >> a >> b;

La librería iostream provee dos streams predefinidas mas: cerr, que es la salida estándar
de errores y clog, la salida estándar de registro o “logging”.

3. Streams especiales: archivos


C++ provee tres streams específicas para leer y escribir caracteres desde y hacia un
archivo en disco:
1. ifstream para leer caracteres desde un archivo
2. ofstream para escribir caracteres en un archivo
3. fstream para leer y escribir caracteres en un archivo
Estas clases derivan de istream y ostream, las clases básicas de entrada/salida definidas
en iostream, y están especialmente diseñadas para interactuar con archivos en
almacenamiento no volátil (disco, pen drive, etc.).
4. Utilización
Un ejemplo sencillo de uso de ofstream:

Informática II Entrada/Salida Pág. 4


#include <iostream>
#include <fstream>
using namespace std;

int main () {
ofstream myfile;
myfile.open ("salida.txt");
myfile << "Escribiendo en archivos.\n";
myfile.close();
return 0;
}

Este programa crea (o abre, si existe) un archivo llamado “salida.txt” y escribe una
cadena de texto en su interior.

5. Apertura de un archivo
Para utilizar un objeto ifstream, ofstream o fstream debe llevarse a cabo la vinculación
del stream al archivo físico mediante una operación de apertura mediante la función
open(), que toma dos argumentos: nombre del archivo y modo de apertura.
El primer parámetro es una cadena de caracteres (const char *) terminada en '\0' y
opcionalmente el segundo, que una constante que determinará el uso que
pretendemos hacer del archivo según la siguiente tabla:
Modo Significado
ios::in El archivo se abre para operaciones de lectura (sólo extracción de
caracteres)
ios::out El archivo se abre para operaciones de escritura (sólo inserción de
caracteres)
ios::binary El archivo se abre en modo binario (su contenido no es texto sino
bytes)
ios::app Las operaciones de inserción tienen lugar al final del archivo, esto
es, preservando su contenido inicial
ios::trunc Si el archivo abierto existe, se descarta la totalidad de datos que
contiene al momento de la apertura

Los modos pueden combinarse utilizando el operador OR '|':

ofstream arch;
arch.open( “datos.txt”, ios::out | ios::app | ios::binary);
En este caso, datos.txt se abre para escribir datos binarios, preservando su contenido
actual.
En todos los casos, la función is_open() permite verificar si un archivo está disponible
para operar sobre el:
if( arch.is_open(){ // se puede operar }
else cout << “Archivo cerrado”;

6. Cierre de un archivo
Para garantizar que las operaciones realizadas efectivamente se reflejen en el archivo

Informática II Entrada/Salida Pág. 5


en disco, cuando se termina de trabajar sobre él debe ejecutar una operación de cierre
mediante la función close():
arch.close();

4. Manipuladores
La librería estándar iostream provee un conjunto de funciones llamadas manipuladores
que, utilizados en conjunto con los operadores << y >> permiten modificar el
comportamiento de los streams. La tabla siguiente muestra algunas frecuentemente
utilizadas:
Manipulador Propósito
endl Nueva línea (Enter)
ends Inserta un carácter de fin de cadena (\0)
flush Vacía el buffer de un stream
skipws Salta espacios y tabulaciones
uppercase Transforma a mayúsculas

Informática II Entrada/Salida Pág. 6

S-ar putea să vă placă și