Lectura segura de la entrada con getline
Use std::getline para leer líneas y valide la entrada del usuario antes de utilizarla.
Lectura segura de la entrada con getline es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
Por qué es importante una entrada segura
La entrada del usuario es la fuente más común de fallos. Un tipo incorrecto, una línea vacía o caracteres inesperados pueden hacer que un programa ingenuo falle. La lectura defensiva es esencial.
Conceptos básicos de std::getline
std::getline(stream, line) lee caracteres hasta el siguiente salto de línea. El salto de línea se consume, pero no se almacena.
std::string line;
std::getline(std::cin, line);Delimitadores personalizados
Pase un tercer argumento para detener la lectura ante cualquier carácter, no solo ante un salto de línea.
std::string field;
std::getline(std::cin, field, ',');Validación de entradas numéricas
Lea primero la línea completa y después analícela. Así evita que cin entre en el estado de error cuando la entrada no tiene el formato correcto.
std::string line;
int n;
if (std::getline(std::cin, line)) {
try {
n = std::stoi(line);
} catch (...) {
std::cout << "Invalid number\n";
}
}Repetición hasta obtener una entrada válida
Combine getline y try/catch para seguir solicitando datos hasta que el usuario proporcione una entrada válida.
int age;
while (true) {
std::cout << "Age: ";
std::string line;
std::getline(std::cin, line);
try {
age = std::stoi(line);
if (age >= 0 && age < 150) break;
} catch (...) {}
std::cout << "Try again.\n";
}Detección del EOF en getline
getline establece el stream en estado de error al llegar al EOF. Compruebe el stream después de la llamada.
std::string line;
while (std::getline(std::cin, line)) {
process(line);
}Recorte de espacios en blanco
Los usuarios suelen añadir espacios sobrantes. Recorte ambos extremos después de leer.
void trim(std::string& s) {
size_t start = s.find_first_not_of(" \t\r\n");
size_t end = s.find_last_not_of(" \t\r\n");
s = (start == std::string::npos) ? "" : s.substr(start, end - start + 1);
}Limpieza del stream
Si mezcla >> y getline, borre primero los caracteres sobrantes.
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');Lectura de varios valores por línea
Lea la línea completa, introdúzcala en un stringstream y después extraiga los valores.
std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);
int a, b, c;
iss >> a >> b >> c;Defensa frente a longitudes máximas
Rechace pronto las entradas demasiado largas para evitar un agotamiento involuntario de los recursos.
std::string line;
if (std::getline(std::cin, line) && line.size() > 1024) {
std::cout << "Input too long.\n";
return 1;
}Lectura de contraseñas o entradas ocultas
La biblioteca estándar no oculta los caracteres introducidos. Utilice API de la plataforma, como termios en Unix o SetConsoleMode en Windows, para solicitar contraseñas.
Comprobación rápida
¿Por qué es más seguro leer con getline y analizar después, en lugar de utilizar std::cin >> n?
Resumen
Lea la entrada del usuario con std::getline, valide o analice los datos por separado y recorte los espacios en blanco. Encierre el análisis en try/catch y repita el proceso hasta obtener un valor válido. Limpie el stream cuando mezcle la extracción con la lectura de líneas.
Preguntas frecuentes
¿La lección «Lectura segura de la entrada con getline» es gratis?
Sí — el texto completo de «Lectura segura de la entrada con getline» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Lectura segura de la entrada con getline»?
Use std::getline para leer líneas y valide la entrada del usuario antes de utilizarla. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Lectura segura de la entrada con getline»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Uso adecuado de std::cin y std::cout
- Formateo de la salida con iomanip
- Lectura segura de la entrada con getline
- Trabajo con std::cerr y std::clog