getline () se salta primero incluso después de borrar ()

Así que tengo una función que sigue saltando el primer getline y directo al segundo. Intenté limpiar el búfer pero aún así no tengo suerte, ¿qué está pasando?

void getData(char* strA, char* strB) { cout << "Enter String 1: "; // Shows this line cin.clear(); cin.getline(strA, 50); // 50 is the character limit, Skipping Input cout << endl << "Enter String 2: "; // Showing This Line cin.clear(); cin.getline(strB, 50); // Jumps Straight to this line } 

Asegúrate de no usar cin >> str . Antes de llamar a la función. Si usa cin >> str y luego quiere usar getline(cin, str) , debe llamar a cin.ignore() antes.

 string str; cin >> str; cin.ignore(); // ignores \n that cin >> str has lefted (if user pressed enter key) getline(cin, str); 

En caso de utilizar cadenas en C:

 char buff[50]; cin.get(buff, 50, ' '); cin.ignore(); cin.getline(buff, 50); 

AGREGAR : Su error probablemente no esté en la función en sí, sino antes de llamar a la función. El stream cin debe leer solo un nuevo carácter de línea \n' en el primer cin.getline .

cin.clear(); borra todos los bits de error en el flujo, no consume ningún dato que pueda estar pendiente.

Desea utilizar cin.ignore() para consumir datos de la transmisión.

Después de leer algo, todavía hay un carácter ‘RETURN’ dentro de bufor, así que tienes que cin.ignore() después de cada lectura.

También puede usar cin.sync() para borrar la secuencia. En realidad, el método claro solo borra las banderas.

También hay una opción para que pueda ir al final de la transmisión, sin dejar nada para leer, debe escribir sin problemas.

 std::cin.seekg(0, std::ios::end); 

Depende de usted lo que va a utilizar.

utilizar cin.ignore(-1); No eliminará el primer carácter de la cadena de entrada