elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Rechazar espacios en c++
0 Usuarios y 3 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Rechazar espacios en c++  (Leído 129 veces)
XapDmann

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Rechazar espacios en c++
« en: Hoy a las 11:20 »

Buen día a todos, tengo un problema con respecto a ingresar espacios como resultado de un string, un ejercicio me dice que mientras no se ingrese nada como valor del string el programa no continúe, pero no entiendo como hacerlo. Creo que es un problema del cmd , por que cuando doy enter sin escribir nada crea una nueva linea.

Uso el CMD de window's para compilar y notepad++ para hacer el codigo.

Hice un ejemplo corto  para que pueden ver.

Código:
#include <iostream>
#include <string>

using namespace std;

int main () {

struct datos {
string nombre;
int edad;
};
datos persona;

//Pide un nombre, y rechaza la opcion cuando se ingresa "p".
      //En vez de "p" debería ingresar un espacio vacío o nada.
do {
cout << "Ingrese nombre: ";
cin >> persona.nombre;

if (persona.nombre.compare("p") == 0) {
cout << "No hay nombre." << endl;
}
}
while (persona.nombre.compare("p") == 0);

return 0;
}


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.242



Ver Perfil
Re: Rechazar espacios en c++
« Respuesta #1 en: Hoy a las 16:13 »

cin tal cual ignora los espacios, tabulaciones y saltos de línea (Enter) al inicio de lo que se escribe, es decir, si no pones nada y das Enter no pasa nada porque lo ignora, si quieres que no sea ignorado debes usar otra instrucción

Entiendo que estás iniciándote en esto, yo recomiendo siempre un buen libro que detalle el comportamiento de las instrucciones que se usan para entenderlas, por ejemplo:

Fundamentos de Programación con C++
http://www.lcc.uma.es/~vicente/docencia/cppdoc/programacion_cxx.pdf

Revisa la parte de "Entrada y Salida de Datos Básica" ahí lo explica todo, en especial la subparte de "Entrada de Datos"

Normalmente se suele utilizar getline para tomar toda la entrada de datos quitando el Enter final, esto lo puedes ver también en el libro en la sección: "6.2.1. Entrada y Salida de Cadenas de Caracteres"

Para tu ejercicio usando getline sería así:

Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main () {
  7.  
  8.  struct datos {
  9.    string nombre;
  10.    int edad;
  11.  };
  12.  datos persona;
  13.  
  14.  //Pide un nombre, y rechaza la opcion cuando se ingresa "p".
  15.  //En vez de "p" debería ingresar un espacio vacío o nada.
  16.  do {
  17.    cout << "Ingrese nombre: ";
  18.    getline(cin, persona.nombre);
  19.  
  20.    if (persona.nombre.compare("") == 0) {
  21.      cout << "No hay nombre." << endl;
  22.    }
  23.  } while (persona.nombre.compare("") == 0);
  24.  
  25.  return 0;
  26. }

Recomiendo leer al completo las dos partes que mencioné porque además de mostrar con ejemplos el uso y comportamiento de cada instrucción también muestra posibles errores del uso de estos o la combinación de estos y como solucionarlos. Esto lo digo porque veo que también vas a pedir la Edad que seguramente lo pedirás con cin, en la página 58 y 59 tienes lo que sería tu ejercicio resuelto usando getline y cin con nombre y edad


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines