SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: Y2J en Viernes 19 de Agosto de 2011, 16:51
-
Veran, tengo que hacer una agenda telefonica donde el usuario introduzca el nombre y telefono de 10 personas , luego debe mostrar el menu con 3 opciones:
1) Buscar por nombre
2) Buscar por numero
3) Salir
el problema es que al buscar por nombre o por numero y programa se cuelga pero no me dice que hubo errores, este es el codigo:
#include <iostream>
#include <cstdlib>
#include <string.h>
using namespace std;
//Prototipos
void Leer_Datos();
void Buscar_Nombre();
void Buscar_Numero();
void Salir();
void Imprimir_Nombre(int pos);
void Imprimir_Numero(int pos);
int Menu();
//void(*Opciones[3])(void);
struct Datos
{
int Numero;
char Nombre[20];
}Persona[10];
void Leer_Datos()
{
for(int i=0;i<10;i++)
{
cout<<"Persona "<<i+1<<": "<<endl;
cout<<"Ingrese el Nombre: ";cin>>Persona.Nombre;
cout<<"Ingrese Numero Telefonico: ";cin>>Persona.Numero;
cout<<endl;
}
}
int Menu()
{
int opcion;
cout<<"Agenda Telefonica"<<endl;
cout<<"1) Buscar por Nombre\n2) Buscar por Numero de Telefono\n3) Salir"<<endl;
cout<<"Ingrese una opcion: ";
cin>>opcion;
return opcion;
}
void Imprimir_Nombre(int pos)
{
if(pos<0)
cout<<"Dato no encontrado"<<endl;
else
cout<<Persona[pos].Numero;
}
void Imprimir_Numero(int pos)
{
if(pos<0)
cout<<"Dato no encontrado"<<endl;
else
cout<<Persona[pos].Nombre;
}
void Buscar_Nombre()
{
char dato[20];
cout<<"Ingrese el Nombre: ";cin>>dato;
bool seguir=true;
int i=0;
signed int pos;
while(i<10 && seguir)
{
if(strcmp(Persona.Nombre,dato)==0) //if(strcmp(Persona.Nombre,Dato_Nombre())==0)
{
seguir=false;
pos=i;
}
}
if(seguir)
pos=-1;
Imprimir_Nombre(pos);
}
void Buscar_Numero()
{
int dato;
cout<<"Ingrese Numero de Telefono: ";cin>>dato;
bool seguir=true;
int i=0;
signed int pos;
while(i<10 && seguir)
{
if(Persona.Numero==dato)
{
seguir=false;
pos=i;
}
}
if(seguir)
pos=-1;
Imprimir_Numero(pos);
}
/*void Salir() ////Eliminar
{
exit(0);
}*/
//void(*Opciones[])(void)={Buscar_Nombre, Buscar_Numero, Salir};
int main(int argc, char *argv[])
{
int opcion;
Leer_Datos();
opcion=Menu();
do{
switch(opcion)
{
case 1:Buscar_Nombre();
case 2:Buscar_Numero();
}
}
while(opcion!=3);
//(Opciones[opcion-1])();
system("PAUSE");
return 0;
}
Que estoy haciendo mal???
-
No he mirao el alogritmo, pero a simple vista se ve que creas un vector de 10 elementos de la estructura Dato. Si quieres referirte a un elemento del vector en concreo tienes que hacer persona
- .* , es decir el primer nombre del vector sería persona[0].nombre. Prueba a cambiar eso aver si tienes algun error mas jeje
-
Consejo, utiliza las etiquetas code para encerrar tu codigo, ya que mejora la legibilidad.
El problema esta en el ciclo while (clasico error de logica), tiene como condicion i < 10, pero nunca incrementas i, por lo tanto i siempre sera menor de cero, y nunca saldra del ciclo.
Solamente incrementa i dentro del ciclo:
while(i<10 && seguir)
{
if(strcmp(Persona[i].Nombre,dato)==0)
{
seguir=false;
pos=i;
}
// Falta incrementar i dentro del ciclo, si no lo incrementas
// siempre sera = cero y nunca saldra del ciclo.
i++;
}
Saludos :)