Entrada y salida de datos I

En este artículo vamos a ver como funciona la entrada y salida de datos en C++, también conocida como I/O. En C++ los flujos de datos son llamados Streams y pueden tomar muchas formas: Desde texto que el usuario introduce en la terminal, a la lectura de un sensor de infrarrojos de un robot, pasando por archivos o bases de datos.

Escribir en la consola

Como ya hemos visto en el programa de ejemplo de la primera lección, escribimos en la consola usando ‘cout‘.

Las cadenas de texto tienen que ir entre comillas dobles ‘»‘, las comillas simples »’ denotan un caracter únicamente, es decir, un tipo char. Si utilizamos cout con una variable, el valor de la variable es impreso. Cout puede ser usado multiples veces, encadenando el resultado en una única salida:

int integer = 42;
std::cout<<"El valor del entero es "<<integer;

Es importante señalar que cout no añade un salto de línea de forma automática, para ello debes hacerlo tú poniendo un ‘\n’ al final de la cadena de texto.

Prueba a escribir un programa que imprima por consola el tamaño en bytes de los diferentes tipos de variable. Utiliza la función sizeof() para ello.

Más información acerca de sizeof() aquí.

Dicho programa se podría parecer al siguiente ejemplo:

#include <iostream>
using namespace std;
 
int main()
{
   cout << "Bytes de variable char : " << sizeof(char) << endl;
   cout << "Bytes de variable int : " << sizeof(int) << endl;
   cout << "Bytes de variable short int : " << sizeof(short int) << endl;
   cout << "Bytes de variable long int : " << sizeof(long int) << endl;
   cout << "Bytes de variable float : " << sizeof(float) << endl;
   cout << "Bytes de variable double : " << sizeof(double) << endl;
   cout << "Bytes de variable wchar_t : " << sizeof(wchar_t) << endl;
  
   return 0;
}

Fíjate sobre todo en el uso del namespace y de endl el cual finaliza la línea de forma muy parecida a como lo hace ‘\n’.

Formato de salida

Podemos dar formato a la salida usando secuencias de escape sin necesidad de usar ninguna librería adicional. Estas secuencias de escape son muy parecias a las de otros lenguajes, por ejemplo \n para el salto de línea o \t para insertar una tabulación,

Puedes incluir la librería iomanip para poder darle un ancho fijo a la salida con la función setw:

#include <iomanip>

std::cout<<"\n\nTexto sin formato\n";
std::cout<<"Roca"<<"Tierra"<<"Volador"<< "\n";
std::cout<<"\nTexto con setw(15)\n";
std::cout<<"Roca"<<std::setw(15)<<"Tierra"<<std::setw(15)<<"Volador"<< "\n";
std::cout<<"\nTexto con tabulaciones\n";
std::cout<<"Roca\t"<<"Tierra\t"<<"Volador"<< "\n";

Que produce:

Texto sin formato
RocaTierraVolador

Texto con setw(15)
Roca         Tierra        Volador


Texto con tabulaciones
Roca    Tierra    Volador

Entrada y salida de archivos

Las operaciones con archivos son algo que suele generar quebraderos de cabeza en los programadores noveles. En C++ es muy importante seguir determinadas pautas si no queremos encontrarnos con programas erróneos o archivos corruptos.

Sigue estos pasos cada vez que vayas a realizar algún tipo de operación con archivos:

 - Incluye la librería <fstream> 
 - Crea un stream (input, output, both)
      - ofstream miarchivo; (para escribir a un archivo)
      - ifstream miarchivo; (para leer un archivo)
      - fstream miarchivo; (para leer y escribir a un archivo)
 - Abre el archivo miarchivo.open("nombre");
 - Escribe o lee el archivo
 - Cierra el archivo miarchivo.close();

Te adjunto un programa de ejemplo que puedes usar como base para el trabajo con archivos:

// incluye la libreria iostream
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main () {
    string line;
    // crea un stream para escritura
    ofstream miArchivo1 ("entrada.txt", ios::app);
    if (miArchivo1.is_open())
    {
        miArchivo1 << "\nAñado una linea.\n";
        miArchivo1 << "Otra línea más.\n";
        miArchivo1.close();
    }
    else cout << "Imposible abrir el archivo para escritura";

    // crea un stream para lectura
    ifstream miArchivo2 ("entrada.txt");
    // crear una variable de tipo ifstream abre el archivo
    if (miArchivo2.is_open())
    {
        while ( getline (miArchivo2, line) )
        {
            cout << line << '\n';
        }
        miArchivo2.close();
    }
    else cout << "Imposible abrir el archivo para lectura";

    return 0;
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.