"cin>>" coge de la entrada caracteres hasta X punto. Si tú introduces "78456\n", va a leer el entero 78456 (en caso de que hagas "cin>>int" claro). El "\n" ese va a quedar en el buffer. Esto implica que la siguiente llamada a getline va a leer hasta el "\n", es decir, nada. Siquiera va a pedir entrada por teclado.
Visto el aspecto técnico, hay formas de arreglarlo:
[ul]
- Colocar después de cada "cin>>" un cin.ignore() para que ignore el salto de línea. Si no te fuera, podrías poner "cin.ignore(2), para que ignore 2 caracteres (por si acaso, vaya)
- No utilizar "cin>>". Sé que es práctico, pero este es un problema común. La opción, sería leer siempre con getline, y si necesitas interpretar un entero, podrías poner:
Código
La función stoi: http://www.cplusplus.com/reference/string/stoi/
string t; getline(cin, t); // Leemos el número. Ej: 542 int n = stoi(t); // Convertimos string a int
También tienes para convertir a float: stof