Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: diegoCmC en 6 Junio 2011, 17:28 pm



Título: Salir de bucle cuando el caracter es un espacio [Resuelta]
Publicado por: diegoCmC en 6 Junio 2011, 17:28 pm
Tengo una duda con el siguiente programa que estoy creando, es de fines didacticos, y aun lo tengo en construccion, asi que me faltan cosas xD
la duda es como salgo de una cadena de caracteres cuando hay un espacio

En este ejemplo esta en la linea 31 y hago que salga cuando se encuentra un '.' como seria para salir cuando se encuentra un espacio o un intro??

Código:
//Programa que almacena el nombre y numero de telefono de 10 personas y permite mostrarlos
#include<iostream>
using namespace std;

struct Persona {
    char Nombre[65];
    long Telefono;
} Gente[10];

int main()
{
    //Mostramos por pantalla la utilidad del programa
    cout<<"Programa de almacenamiento de datos de personas"<<endl;
    cout<<"-----------------------------------------------"<<endl<<endl;

    char opcion;
    int CuentaLetras=0;

    //Creamos la interacion inicial para introducir los 10 datos
    for (int i=0; i<10; i++)
    {
        //mensaje inicial
        cout<<"Introduce un nombre: ";

        //Bucle que almacena los nombres en la variable
        do
        {
            cin>>Gente[i].Nombre[CuentaLetras];
            CuentaLetras++;
        }
        while(Gente[i].Nombre[CuentaLetras-1]!='.');
        CuentaLetras=0;
    }
    for(int i=0; i<10; i++)
    {
        cout<<Gente[i].Nombre;
    }

    //Creamos el menu de interacion con el usuario.
    do
    {
        cout<<"a) Buscar por nombre"<<endl;
        cout<<"b) Buscar por número de télefono"<<endl;
        cout<<"c) Salir"<<endl<<endl;
        cout<<"Pulsa una opcion: ";
        cin>>opcion;

        //Opcion a. Buscar por nombre

        //Opcion b. Buscar por número de telefono

    }
    //Opcion c. Salir
    while(opcion!='c');

    return 0;
}


Título: Re: Salir de bucle cuando el caracter es un espacio
Publicado por: Oblivi0n en 6 Junio 2011, 19:47 pm
Prueba a poner para el espacio ' ' o 0x20 (creo que era ese el caracter ASCII del espacio), y para el intro '\n'


Título: Re: Salir de bucle cuando el caracter es un espacio
Publicado por: lapras en 6 Junio 2011, 19:52 pm
while(Gente.Nombre[CuentaLetras-1]!='.' && Gente.Nombre[CuentaLetras-1]!=0x20 && Gente.Nombre[CuentaLetras-1]!=10);
Debes buscar su valor decimal, haxadecimal u octal en la tabla ascii.
Tambien se puede poner de la siguiente manera "\n" . Esto es el enter.

http://www.elhacker.net/ascii.gif


Título: Re: Salir de bucle cuando el caracter es un espacio
Publicado por: diegoCmC en 6 Junio 2011, 20:37 pm
Muchas gracias por las respuestas, pero eso ya lo habia probado y no me funciona :S

while(Gente.Nombre[CuentaLetras-1]!="/n");    da un error
while(Gente.Nombre[CuentaLetras-1]!='/n');    me compila perfecto pero el bucle es infinito
while(Gente.Nombre[CuentaLetras-1]!=/n);    da un error

tambien me dan bucles infinitos con
while(Gente.Nombre[CuentaLetras-1]!=0x20);
while(Gente.Nombre[CuentaLetras-1]!=' ');


el programa que uso es el code:blocks de ubuntu, no se si sera el programa el problema

muchas gracias por las respuestas, pero a ver si a alguien se le ocurre algo que me funcione =)


Título: Re: Salir de bucle cuando el caracter es un espacio
Publicado por: Gunit en 6 Junio 2011, 20:49 pm
Código
  1. while(Gente.Nombre[CuentaLetras-1]!='/n');

Es \n y no /n , se usa barra que esta al lado del 1  :P

Corregido :

Código
  1. while(Gente.Nombre[CuentaLetras-1]!='\n');

Saludos.


Título: Re: Salir de bucle cuando el caracter es un espacio
Publicado por: Oblivi0n en 6 Junio 2011, 22:08 pm
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char **argv)
  4. {
  5. while(1>0)
  6. {
  7. switch(getchar())
  8. {
  9. case (char)0x20:
  10. printf("Espacio\n");
  11. break;
  12. case (char) 0xA:
  13. printf("Intro\n");
  14. break;
  15. default:
  16. printf("Otra\n");
  17. break;
  18. }
  19. }
  20. return 0;
  21. }

ami eso me los reconoce...


Título: Re: Salir de bucle cuando el caracter es un espacio
Publicado por: lapras en 6 Junio 2011, 22:48 pm
Perdon no es asi "\n" es asi '\n' por que sono seria una cadena i es un solo caracter.


Título: Re: Salir de bucle cuando el caracter es un espacio
Publicado por: alexis33de en 7 Junio 2011, 01:07 am
Lo que yo haria es usar la funcion strtok, q basicamente hace lo q quieres, que al escontrar un espacio siga .
Aqui un ejemplo de como funciona, tengo una cadena y al encontrar un espacio , devuelve palabra y luego un enter.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.   char s1[49] = "Esto es un ejemplo para usar la funcion strtok()";
  8.   char s2[4] = " \n\t";
  9.   char *ptr;
  10.  
  11.   printf( "s1=%s\n", s1 );
  12.  
  13.   ptr = strtok( s1, s2 );    // Primera llamada => Primer token
  14.   printf( "%s\n", ptr );
  15.   while( (ptr = strtok( NULL, s2 )) != NULL )    // Posteriores llamadas
  16.     printf( "%s\n", ptr );
  17.  system("pause");
  18.   return 0;
  19. }


Título: Re: Salir de bucle cuando el caracter es un espacio [Resuelta]
Publicado por: diegoCmC en 7 Junio 2011, 16:27 pm
Muchas gracias por la ayuda chicos