una - validar tipos c++
C++: ¿cómo puedo verificar si el buffer cin está vacío? (4)
¿Cómo verifica si el usuario no ingresó nada en un comando cin y simplemente presionó enter?
La manera simple >>
{
char X=0; // ASCII( 0 ) means a NULL value
cin>>X;
if(X==0 || X==10) // ASCII( 10 ) means ENTER
cout<<"User din''t enter ANYTHING !! ";
}
Pero un problema simple es ...
cin simplemente no te permitirá avanzar más sin ingresar un personaje
por carácter aquí me refiero a un DÍGITO o alfabeto o símbolo especial, no espacio, ingrese nulo, etc.
Espero que esto resuelva tu problema, si no lo hace, estaré encantado de ayudar. Solo házmelo saber.
cin no continuará con el programa a menos que el usuario ingrese al menos 1 carácter (ingresar no cuenta). Si el usuario no da CUALQUIER entrada, cin seguirá esperando que el usuario ingrese y luego presione enter.
Al leer de std::cin , es preferible no usar el operador de extracción de flujo >>
ya que puede tener todo tipo de efectos secundarios desagradables. Por ejemplo, si tienes este código:
std::string name;
std::cin >> name;
Y entro en John Doe
, luego la línea para leer desde cin
solo mantendrá el valor de John
, dejando a Doe
atrás para ser leído por alguna operación de lectura futura. Del mismo modo, si tuviera que escribir:
int myInteger;
std::cin >> myInteger;
Y luego John Doe
, luego cin
entrará en un estado de error y se negará a realizar operaciones futuras de lectura hasta que elimine explícitamente su estado de error y elimine los caracteres que causaron el error.
Una mejor forma de hacer la entrada del usuario es usar std::getline para leer caracteres del teclado hasta que el usuario acceda a ingresar. Por ejemplo:
std::string name;
getline(std::cin, name); // getline doesn''t need the std:: prefix here because C++ has ADL.
ADL significa búsqueda dependiente de argumento. Ahora, si ingreso a John Doe
, el valor del name
será John Doe
y no quedarán datos en cin
. Además, esto también le permite probar si el usuario simplemente presiona enter:
std::string name;
getline(std::cin, name);
if (name.empty()) {
/* ... nothing entered ... */
}
El inconveniente de utilizar este enfoque es que si desea leer en una línea de datos formateada, un int
o un double
tendrá que analizar la representación de la cadena. Personalmente creo que esto vale la pena porque te da un control más detallado de qué hacer si el usuario ingresa algo inválido y "guarda" cin
para que nunca entre en un estado de falla.
Enseño un curso de programación en C ++ y tengo algunas notas de clase sobre la biblioteca de secuencias que incluye una gran cantidad de detalles sobre cómo leer datos formateados de cin
de manera segura (principalmente al final del capítulo). No estoy seguro de lo útil que encontrará esto, pero en caso de que sea útil, pensé en publicar el enlace.
¡Espero que esto ayude!
int main(){
string str[100];
std::cout<<"Hello how are you ? /n";
std::cin>>str;
if(str.length() > 0){
// If input is seen
}
else{
// If input is not seen
}
}
Cualquier problema, házmelo saber.