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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Cómo validar espacios vacíos en C++?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo validar espacios vacíos en C++?  (Leído 19,690 veces)
Juancho25

Desconectado Desconectado

Mensajes: 28


Ver Perfil
¿Cómo validar espacios vacíos en C++?
« en: 6 Mayo 2013, 00:02 am »

Hola, lo que necesito es que cuando pida ingresar un dato y se presione la tecla enter dejando el espacio vacío, no continúe a la siguiente opción sino que permanezca en la misma hasta que se metan datos y no quede el espacio en blanco. Espero me puedan ayudar.


En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: ¿Cómo validar espacios vacíos en C++?
« Respuesta #1 en: 6 Mayo 2013, 00:35 am »

Segun lo que entendi podria hacerlo asi:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int aux;
  8.    do{
  9.      cout << "Ingrese un dato: ";
  10.      cin >> aux;
  11.     }
  12.    while(aux == 32);
  13.  
  14.    cin.get();
  15.    return 0;
  16. }

Saludos  :laugh:


En línea

Juancho25

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: ¿Cómo validar espacios vacíos en C++?
« Respuesta #2 en: 6 Mayo 2013, 02:46 am »

Segun lo que entendi podria hacerlo asi:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int aux;
  8.    do{
  9.      cout << "Ingrese un dato: ";
  10.      cin >> aux;
  11.     }
  12.    while(aux == 32);
  13.  
  14.    cin.get();
  15.    return 0;
  16. }

Saludos  :laugh:

Gracias pero veo que ese código es para tipo int, también lo necesito para char el cual tengo con gets(variable) para que me acepte espacios. ¿Sabes cómo podría hacerle?
En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: ¿Cómo validar espacios vacíos en C++?
« Respuesta #3 en: 6 Mayo 2013, 04:26 am »

Siendo asi el caso quedaria de esta forma, lo he hecho en c++:

Código
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    char palabra[30];
  9.  
  10.    do{
  11.      cout<<"Ingresa una cadena: ";
  12.      cin.getline(palabra, 30, '\n');
  13.     }
  14.      while(strchr(palabra, 32));
  15.  
  16.    cin.get();
  17.    return 0;
  18. }
  19.  

No te recomiendo que uses gets las razones aqui:

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Espero haberte ayudado cualquier duda hazmelo saber..

Un Saludo!!  ;D
« Última modificación: 6 Mayo 2013, 04:45 am por малко » En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: ¿Cómo validar espacios vacíos en C++?
« Respuesta #4 en: 6 Mayo 2013, 04:51 am »

A continuación una solució un poco más genérica:
Código
  1. #include <iostream>
  2. #include <sstream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.    string dataIn;
  10.    bool dataEntered = false;
  11.  
  12.    while (!dataEntered)
  13.    {
  14.        cout << "Introduce un dato: ";
  15.        getline(cin, dataIn);
  16.        if (dataIn.empty())
  17.        {
  18.            cout << "Ningun dato fue ingresado" << endl;
  19.        }
  20.        else
  21.        {
  22.            dataEntered = true;
  23.        }
  24.    }
  25.  
  26.    // Si necesitamos el dato en un int, float, double...
  27.    istringstream stringStream(dataIn);
  28.  
  29.    // Aqui puede ser un float, un int, un double....
  30.    int v;
  31.    if (!(stringStream >> v))
  32.    {
  33.        cout << "Error dato no numerico..." << endl;
  34.        cout << "Raw Dato: " << dataIn << endl;
  35.    }
  36.    else
  37.    {
  38.        cout << "Raw Dato: " << dataIn << endl;
  39.        cout << "Dato: " << v << endl;
  40.    }
  41.  
  42.    return 0;
  43. }
  44.  
  45.  

Documentación:
StringStreams
« Última modificación: 6 Mayo 2013, 04:56 am por RyogiShiki » En línea

Juancho25

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: ¿Cómo validar espacios vacíos en C++?
« Respuesta #5 en: 6 Mayo 2013, 06:25 am »

Siendo asi el caso quedaria de esta forma, lo he hecho en c++:

Código
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    char palabra[30];
  9.  
  10.    do{
  11.      cout<<"Ingresa una cadena: ";
  12.      cin.getline(palabra, 30, '\n');
  13.     }
  14.      while(strchr(palabra, 32));
  15.  
  16.    cin.get();
  17.    return 0;
  18. }
  19.  

No te recomiendo que uses gets las razones aqui:

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Espero haberte ayudado cualquier duda hazmelo saber..

Un Saludo!!  ;D

Implementé el código de arriba y me funcionó, sólo un pequeño problema, no me permite ingresar más de 2 palabras, es decir, al momento de dejar el espacio para poner la segunda palabra, me marca como si estuviera vacío y me regresa a que ingrese de nuevo el texto.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: ¿Cómo validar espacios vacíos en C++?
« Respuesta #6 en: 6 Mayo 2013, 15:14 pm »

sólo un pequeño problema, no me permite ingresar más de 2 palabras, es decir, al momento de dejar el espacio para poner la segunda palabra, me marca como si estuviera vacío y me regresa a que ingrese de nuevo el texto.
Si estas aprendiendo C++ lo mejor es seguir el ejemplo de RyogiShiki ya que al utilizar la biblioteca estándar de C++ te olvidas de ciertos problemas (por ejemplo la longitud de la linea).

El programa que mencionas no acepta lineas con mas de una palabra porque su condición de salida lo prohíbe:
Código
  1. while(strchr(palabra, 32));
La función strchr retorna verdadero (una dirección diferente de NULL) cuando el carácter indicado por el segundo argumento (en este caso 32, mejor indicarlo con ' ') se encuentra en la cadena (primer argumento). Es por eso que el bucle se repetirá mientras la linea contenga un espacio.

En su lugar se debe verificar que la linea contenga al menos un caracter que no sea espacio o tabulador. Para ello se puede utilizar:
Código
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.   char linea[30];
  9.   size_t pos;
  10.  
  11.   do {
  12.      cout << "Ingresa una cadena: ";
  13.      cin.getline(linea, 30);
  14.  
  15.      pos = strspn(linea, " \t");
  16.   }while (linea[pos] == '\0');
  17.  
  18.   cout << "Linea: " << linea << endl;
  19.  
  20.   return 0;
  21. }

Pero, de nuevo, mejor enfocate en aprender la biblioteca estándar de C++.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como remover espacios en C/C++?
Programación C/C++
t4r0x 5 3,455 Último mensaje 17 Junio 2014, 14:22 pm
por leosansan
Como puedo eliminar espacios vacios en un char array?
Programación C/C++
saintmauricioxd 4 6,116 Último mensaje 11 Octubre 2015, 11:20 am
por ivancea96
sustituir espacios vacios en url
Desarrollo Web
Marciano_79 2 2,870 Último mensaje 7 Septiembre 2016, 17:41 pm
por Marciano_79
[Pregunta]: No enviar espacios vacíos
Desarrollo Web
Leguim 3 2,200 Último mensaje 26 Marzo 2019, 04:59 am
por Leguim
¿Como dejar espacios en un int?
Programación C/C++
LuisUvtol 1 2,068 Último mensaje 4 Mayo 2020, 18:00 pm
por ThunderCls
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines