Estoy tratando de obtener algunos parámetros de entrada de usuario desde la consola, dos cadenas, dos ints y un doble. El código en cuestión Estoy intentando utilizar es la siguiente:C++ getline() no está esperando la entrada de la consola cuando se llama varias veces
#include <string>
#include <iostream>
using namespace std;
// ...
string inputString;
unsigned int inputUInt;
double inputDouble;
// ...
cout << "Title: ";
getline(cin, inputString);
tempDVD.setTitle(inputString);
cout << "Category: ";
getline(cin, inputString);
tempDVD.setCategory(inputString);
cout << "Duration (minutes): ";
cin >> inputUInt;
tempDVD.setDuration(inputUInt);
cout << "Year: ";
cin >> inputUInt;
tempDVD.setYear(inputUInt);
cout << "Price: $";
cin >> inputDouble;
tempDVD.setPrice(inputDouble);
Sin embargo, cuando se ejecuta el programa, en lugar de esperar a que el primer inputString a ser introducido, el código no se detiene hasta el segundo getline() llamada . Así, la salida de la consola se ve así:
Título: Categoría:
con el cursor que aparece después de la categoría. Si ingreso ahora, el programa salta a la entrada del año y no me permite ingresar más de una cadena. ¿Que esta pasando aqui?
no puede reproducir; por favor, publique un código real y completo. Apuesto a que tu problema está en otro lado. Además, no mezcle la entrada formateada y 'getline()'. –
@KerrekSB: Estoy de acuerdo en que mezclarlos es un síntoma de mal estilo, pero ¿cuál es el motivo objetivo para no mezclarlos? Creo que es perfectamente válido mezclarlos, realmente. – sehe
@sehe: El problema es que la extracción formateada no consume las nuevas líneas, por lo que es muy fácil obtener resultados inesperados cuando haces 'getline()' después de pensar que ya procesaste toda la línea anterior. No digo que sea imposible, pero a menudo hace que la lógica sea muy difícil de leer y mantener. –