C ++ haciendo que cin lea un carácter de retorno
Pregunta
Me preguntaba cómo usar cin
para que si el usuario no ingresa ningún valor y simplemente presiona ENTER
que cin
reconocerá esto como entrada válida.
Solución
Probablemente quiera probar std :: getline
:
#include <iostream>
#include <string>
std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...
Otros consejos
Creo que para la entrada del usuario std :: getline
funciona muy bien.
Puede usarlo para leer una línea y simplemente descartar lo que lee.
El problema de hacer cosas como esta,
// Read a number:
std::cout << "Enter a number:";
std::cin >> my_double;
std::count << "Hit enter to continue:";
std::cin >> throwaway_char;
// Hmmmm, does this work?
es que si el usuario ingresa otra basura, p. " 4.5 - acerca de " es muy fácil salir de la sincronización y leer lo que el usuario escribió la última vez antes de imprimir el mensaje que necesita ver la próxima vez.
Si lee cada línea completa con std :: getline (std :: cin, a_string)
y luego analiza la cadena devuelta (por ejemplo, usando un istringstream u otra técnica), es mucho más fácil mantener los avisos impresos sincronizados con la lectura de std :: cin, incluso ante la entrada confusa.
¿Cin. getline resuelve su problema?
Para detectar al usuario presionando la tecla Intro en lugar de ingresar un número entero:
char c;
int num;
cin.get(c); // get a single character
if (c == 10) return 0; // 10 = ascii linefeed (Enter Key) so exit
else cin.putback(c); // else put the character back
cin >> num; // get user input as expected
Alternativamente:
char c;
int num;
c = cin.peek(); // read next character without extracting it
if (c == '\n') return 0; // linefeed (Enter Key) so exit
cin >> num; // get user input as expected
Intente eliminar el búfer cin (está almacenado de forma predeterminada en el búfer).