La entrada y salida por consola (o I/O por consola) se refiere a la interacción entre un programa y el usuario a través de la línea de comandos.
En C++, esto se logra utilizando flujos de entrada y salida proporcionados por la biblioteca estándar.
Comando | Concepto | Descripción |
---|---|---|
std::cin | Entrada | Recibir datos desde la entrada estándar (generalmente el teclado). |
std::cout | Salida | Enviar datos a la salida estándar (generalmente la pantalla). |
std::cerr | Error | Enviar mensajes de error a la salida estándar de errores. |
std::clog | Advertencias | Similar a std::cerr , pero se utiliza para mensajes de advertencia. |
Entrada de datos
std::cin
es el objeto de flujo de entrada estándar en C++. Permite leer datos desde la entrada estándar y se usa comúnmente para leer valores introducidos por el usuario a través del teclado.
Para leer datos de std::cin
, se utiliza el operador de extracción (>>
):
#include <iostream>
int main() {
int number;
std::cout << "Introduce un número entero: ";
std::cin >> number;
std::cout << "El número introducido es: " << number << std::endl;
return 0;
}
En este ejemplo,
- El programa solicita al usuario que introduzca un número entero.
std::cin >> number;
lee el valor introducido por el usuario- Lo almacena en la variable
number
.
Lectura de cadenas de texto
Para leer cadenas de texto, puedes utilizar std::cin
junto con el operador de extracción:
#include <iostream>
#include <string>
int main() {
std::string name;
std::cout << "Introduce tu nombre: ";
std::getline(std::cin, name); // Lee toda la línea de entrada
std::cout << "Hola, " << name << "!" << std::endl;
return 0;
}
En este caso, std::getline(std::cin, name);
se utiliza para leer una línea completa de texto, permitiendo que el usuario introduzca nombres que contengan espacios.
Manejo de errores
Cuando se introducen datos que no son del tipo esperado, std::cin
puede entrar en un estado de error. Puedes verificar y manejar estos errores utilizando el estado de flujo:
#include <iostream>
int main() {
int number;
std::cout << "Introduce un número entero: ";
while (!(std::cin >> number)) {
std::cin.clear(); // Limpiar el estado de error
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Ignorar la entrada incorrecta
std::cout << "Entrada inválida. Por favor, introduce un número entero: ";
}
std::cout << "El número introducido es: " << number << std::endl;
return 0;
}
En este código,
std::cin.clear()
se utiliza para limpiar el estado de error del flujostd::cin.ignore()
se utiliza para descartar la entrada incorrecta.
Salida de datos
std::cout
es el objeto de flujo de salida estándar en C++. Se utiliza para mostrar datos en la consola y se usa comúnmente para enviar información al usuario.
Para enviar datos a std::cout
, se utiliza el operador de inserción (<<
):
#include <iostream>
int main() {
std::cout << "Hola, Mundo!" << std::endl;
return 0;
}
Aquí, std::cout << "Hola, Mundo!" << std::endl;
envía el texto “Hola, Mundo!” a la consola, seguido de un salto de línea (std::endl
).
Formateo de salida
Puedes formatear la salida utilizando manipuladores de flujo:
#include <iostream>
#include <iomanip> // Para manipuladores de formato
int main() {
double pi = 3.14159;
std::cout << "Valor de Pi: " << std::fixed << std::setprecision(2) << pi << std::endl;
return 0;
}
En este ejemplo,
std::fixed
ystd::setprecision(2)
se utilizan para controlar el formato del número flotante, mostrando dos decimales.
Manipuladores de flujo
Además de std::fixed
y std::setprecision
, hay otros manipuladores útiles:
Comando | Descripción |
---|---|
std::setw(n) | Establece el ancho del campo para la salida. |
std::left | Alinea la salida a la izquierda. |
std::right | Alinea la salida a la derecha. |
std::hex | Cambia la base numérica de la salida a hexadecimal. |
std::oct | Cambia la base numérica de la salida a octal. |
std::dec | Cambia la base numérica de la salida a decimal. |
#include <iostream>
#include <iomanip>
int main() {
int number = 255;
std::cout << "Decimal: " << number << std::endl;
std::cout << "Hexadecimal: " << std::hex << number << std::endl;
std::cout << "Octal: " << std::oct << number << std::endl;
return 0;
}
Errores y advertencias
Errores
std::cerr
se utiliza para la salida de errores. A diferencia de std::cout
, std::cerr
no está asociado con el buffer de salida, por lo que los mensajes de error se muestran inmediatamente.
#include <iostream>
int main() {
std::cerr << "Este es un mensaje de error." << std::endl;
return 0;
}
Advertencias
std::clog
es similar a std::cerr
, pero generalmente se usa para mensajes de log y advertencias. Su salida puede ser redirigida a diferentes lugares.
#include <iostream>
int main() {
std::clog << "Este es un mensaje de log." << std::endl;
return 0;
}
Ejemplos prácticos
Calculadora básica
A continuación, un ejemplo de una calculadora básica que utiliza std::cin
y std::cout
para realizar operaciones aritméticas simples.
#include <iostream>
int main() {
double num1, num2;
char op;
std::cout << "Introduce dos números: ";
std::cin >> num1 >> num2;
std::cout << "Introduce una operación (+, -, *, /): ";
std::cin >> op;
switch(op) {
case '+': std::cout << "Resultado: " << num1 + num2 << std::endl; break;
case '-': std::cout << "Resultado: " << num1 - num2 << std::endl; break;
case '*': std::cout << "Resultado: " << num1 * num2 << std::endl; break;
case '/': std::cout << "Resultado: " << num1 / num2 << std::endl; break;
default: std::cout << "Operación no válida" << std::endl;
}
return 0;
}
Lectura de datos y reporte
Este ejemplo muestra cómo leer datos de entrada y luego reportar esos datos al usuario.
#include <iostream>
#include <string>
int main() {
std::string name;
int age;
std::cout << "Introduce tu nombre: ";
std::getline(std::cin, name);
std::cout << "Introduce tu edad: ";
std::cin >> age;
std::cout << "Hola, " << name << ". Tienes " << age << " años." << std::endl;
return 0;
}