• Sábado 14 de Diciembre de 2024, 20:36

Autor Tema:  Problema al hacer una Agenda Telefonica en C++  (Leído 2476 veces)

Y2J

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problema al hacer una Agenda Telefonica en C++
« en: Viernes 19 de Agosto de 2011, 16:51 »
0
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???                 

Checho360

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re:Problema al hacer una Agenda Telefonica en C++
« Respuesta #1 en: Viernes 19 de Agosto de 2011, 17:35 »
0
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

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Problema al hacer una Agenda Telefonica en C++
« Respuesta #2 en: Domingo 21 de Agosto de 2011, 03:53 »
0
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:

Código: [Seleccionar]
    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 :)
« última modificación: Domingo 21 de Agosto de 2011, 03:55 por ProfesorX »

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================