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.

¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top