Salir de bucle cuando el caracter es un espacio [Resuelta]

Iniciado por diegoCmC, 6 Junio 2011, 17:28 PM

0 Miembros y 1 Visitante están viendo este tema.

diegoCmC

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??

//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;
}
a todas las que me abrieron su coraza traeles suerte
ya no creo en el amor pero querria volver a verte

Oblivi0n

Prueba a poner para el espacio ' ' o 0x20 (creo que era ese el caracter ASCII del espacio), y para el intro '\n'

lapras

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

diegoCmC

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 =)
a todas las que me abrieron su coraza traeles suerte
ya no creo en el amor pero querria volver a verte

Gunit

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

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

Corregido :

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

Saludos.

Oblivi0n

#include <stdio.h>

int main(int argc, char **argv)
{
while(1>0)
{
switch(getchar())
{
case (char)0x20:
printf("Espacio\n");
break;
case (char) 0xA:
printf("Intro\n");
break;
default:
printf("Otra\n");
break;
}
}
return 0;
}


ami eso me los reconoce...

lapras

Perdon no es asi "\n" es asi '\n' por que sono seria una cadena i es un solo caracter.

alexis33de

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 (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char s1[49] = "Esto es un ejemplo para usar la funcion strtok()";
   char s2[4] = " \n\t";
   char *ptr;

   printf( "s1=%s\n", s1 );

   ptr = strtok( s1, s2 );    // Primera llamada => Primer token
   printf( "%s\n", ptr );
   while( (ptr = strtok( NULL, s2 )) != NULL )    // Posteriores llamadas
     printf( "%s\n", ptr );
  system("pause");
   return 0;
}


diegoCmC

a todas las que me abrieron su coraza traeles suerte
ya no creo en el amor pero querria volver a verte