es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 &lt;&lt; &quot;Longitud del texto: &quot;;
std::cin.get(longitud_texto);
std::cout &lt;&lt; &quot;\nLongitud del texto: &quot; &lt;&lt; longitud_texto &lt;&lt; std::endl;

texto = new char[1024];
std::cout &lt;&lt; &quot;\n\nTexto: &quot;;
std::cin.read(texto, longitud_texto);
std::cout &lt;&lt; &quot;\n\nTexto: &quot; &lt;&lt; texto &lt;&lt; std::endl;

return 0;

}

Código probado en: GCC 11, clang 13. SO: Linux.

Tags:  , , ,

Answer

  1. Avatar for 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 variable text_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 por text_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ón std::getline(). La función std::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:

    #include <iostream>
    #include <string>
    
    int main() {
    
        std::string text;
    
        std::cout << "Ingrese el texto: ";
        std::getline(std::cin, text, '\r');
        std::cout << "Texto: " << text << std::endl;
    
        return 0;
    }
    

    En este ejemplo, la función std::getline() lee caracteres de std::cin hasta que encuentra un carácter [Return] ('\r'). La cadena resultante se almacena en la variable text, que luego se puede utilizar según sea necesario.

Comments are closed.