No se puede leer con `std::cin.read`: la tecla de retorno no se reconoce.
Estoy tratando de leer una cadena desde el teclado con la función std::cin.read()
.
Lo que sucede es que parece que la cadena se lee mientras la escribo, pero el carácter [Return] se trata como un salto de línea normal, y no como un terminador.
¿Cuál es el terminador para esta función? ¿Es posible modificarlo?
#include <iostream>
char* texto;
char longitud_texto = 0;
int main() {
std::cout << "Longitud del texto: ";
std::cin.get(longitud_texto);
std::cout << "\nLongitud del texto: " << longitud_texto << std::endl;
texto = new char[1024];
std::cout << "\n\nTexto: ";
std::cin.read(texto, longitud_texto);
std::cout << "\n\nTexto: " << texto << std::endl;
return 0;
}
Código probado en: GCC 11, clang 13. SO: Linux.
davy.ai
El terminador para la función
std::cin.read()
es el número de caracteres que se deben leer según lo especificado en el segundo argumento de la función. En el código proporcionado, la variabletext_length
se usa para especificar la cantidad de caracteres que se deben leer.En el código dado, el carácter [Return] no se trata como un terminador, sino que se incluye como parte de la cadena leída por la función
std::cin.read()
. Esto se debe a que la función lee la cantidad exacta de caracteres especificada portext_length
, independientemente de si están separados por saltos de línea u otros caracteres.Es posible modificar el terminador para la función
std::cin.read()
utilizando en su lugar la funciónstd::getline()
. La funciónstd::getline()
lee caracteres del flujo de entrada hasta que encuentra un delimitador especificado, que puede establecerse como el carácter [Return] si se desea. Esto permitiría al usuario ingresar una cadena completa seguida de un carácter [Return], que se trataría como un terminador y se excluiría de la cadena leída por la función.Código de ejemplo que utiliza
std::getline()
con un carácter [Return] como delimitador:En este ejemplo, la función
std::getline()
lee caracteres destd::cin
hasta que encuentra un carácter [Return] ('\r'
). La cadena resultante se almacena en la variabletext
, que luego se puede utilizar según sea necesario.