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;
}
Prueba a poner para el espacio ' ' o 0x20 (creo que era ese el caracter ASCII del espacio), y para el intro '\n'
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
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 =)
while(Gente.Nombre[CuentaLetras-1]!='/n');
Es \n y no /n , se usa barra que esta al lado del 1 :P
Corregido :
while(Gente.Nombre[CuentaLetras-1]!='\n');
Saludos.
#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...
Perdon no es asi "\n" es asi '\n' por que sono seria una cadena i es un solo caracter.
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.
#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;
}
Muchas gracias por la ayuda chicos