2012-08-29 32 views
9

Así que tengo una función que se salta la primera línea y va directamente a la segunda. Traté de limpiar el búfer, pero todavía no tuve suerte, ¿qué está pasando?getline() omitiendo primero incluso después de borrar()

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 
} 
+0

Es su consola de menos de 50 caracteres de ancho? El valor predeterminado es 80, creo –

Respuesta

10

Asegúrese de no haber usado cin >> str. antes de llamar a la función. Si usa cin >> str y luego quiere usar getline(cin, str), debe llamar al 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 c-cuerdas:

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

ADD: Su mal no es, probablemente, en la función en sí, sino más bien antes de llamar a la función. La secuencia cin tiene que leer solo un nuevo carácter de línea \n' en el primer cin.getline.

0

Después de leer algo, todavía hay un carácter 'RETORNO' dentro de la compilación, por lo que tiene que cin.ignore() después de cada lectura.

También puede usar cin.sync() para borrar la secuencia. El método realmente claro solo borra los indicadores.

También hay una opción que puede ir al final de la secuencia, sin nada que leer debe escribir sin problemas.

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

Depende de usted qué usará.

1

cin.clear(); borra cualquier bit de error en la secuencia - no consume ningún dato que pueda estar pendiente.

Quiere utilizar cin.ignore() para consumir datos de la secuencia.

0

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

Cuestiones relacionadas