Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Juancho25 en 6 Mayo 2013, 00:02 am



Título: ¿Cómo validar espacios vacíos en C++?
Publicado por: Juancho25 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.


Título: Re: ¿Cómo validar espacios vacíos en C++?
Publicado por: Blaster 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:


Título: Re: ¿Cómo validar espacios vacíos en C++?
Publicado por: Juancho25 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?


Título: Re: ¿Cómo validar espacios vacíos en C++?
Publicado por: Blaster 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 (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


Título: Re: ¿Cómo validar espacios vacíos en C++?
Publicado por: RyogiShiki 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 (http://www.cplusplus.com/reference/sstream/stringstream/)


Título: Re: ¿Cómo validar espacios vacíos en C++?
Publicado por: Juancho25 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 (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.


Título: Re: ¿Cómo validar espacios vacíos en C++?
Publicado por: rir3760 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