Pregunta de programación en C++: ¿La función de visualización getline y la función get con tres parámetros dejarán de leer la cadena después de encontrar el delimitador especificado en el flujo de entrada?
Hay dos formas de ingresar una línea de cadena en el flujo de entrada a través del dispositivo de entrada estándar: la función get y la función getline. Ambas son funciones miembro del objeto cin similar a istream. mira los dos.
Función getline
La función getline() lee la línea completa. Utiliza el carácter de nueva línea ingresado mediante la tecla ENTER para determinar el final de la entrada, pero no guarda la nueva línea. carácter. En cambio, almacena una cadena y reemplaza las nuevas líneas con caracteres nulos. Para llamar a esta función, puede usar cin.getline(arrayname,strnum). El primer parámetro indica el nombre de la matriz utilizada para almacenar la línea de entrada y el segundo parámetro indica el número de caracteres ingresados. Si el número de caracteres es 20, la función lee hasta 19 caracteres y el resto se utiliza para almacenar el carácter nulo que se agrega automáticamente al final.
La función getline deja de leer cuando se lee el número especificado de caracteres o se encuentra un carácter de nueva línea.
función get
La función get tiene varias variantes, una de las cuales es muy similar a getline, recibe los mismos parámetros, interpreta los parámetros de la misma manera y lee hasta el final. de la línea, pero get no lee ni descarta el carácter de nueva línea, sino que lo deja en la cola de entrada.
Supongamos que get() se llama dos veces:
cin.get(nombre1,tamaño1);
cin.get(nombre2,tamaño2);
Dado que el carácter de nueva línea se dejará en la cola de entrada después de la primera llamada, el primer carácter visto en la segunda llamada es el carácter de nueva línea, por lo que la segunda función get piensa que se ha llegado al final de la línea, No Se encontró contenido legible, es decir, el valor del nombre de la matriz2 está vacío.
La solución es utilizar get(), una función sin parámetros. Su función es leer el siguiente carácter.
cin.get(nombre1,tamaño1);
cin.get();
cin.get(nombre2,tamaño2);
4
Nota: La función cin.get(nombre,tamaño) aún devuelve un objeto cin, por lo que el código anterior se puede escribir como
cin.get(nombre1,tamaño1 ).obtener ();