Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/06/2013, 08:09
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Programa C++ repite codigo

Esto está mal, es decir está bien pero no funcionará tal como esperas. Para cada declaracion de la estructura 'persona' se ejecuta la llamada a la funcion 'persona()' (el segundo campo de tu struct es una llamada a la funcion); como se da el caso que tienes declarado un array de 2 estructuras pues se ejecuta dos veces la funcion 'persona()' ok?

Código:
#define MP 2

struct persona {
    char nom[MAX],tel[MAX];
    persona ();
} t[MP];
Al hacer t[MP] la aplicacion ejecuta lo siguiente: inicia la carga de t[0], reserva MAX bytes para 'nom' en t[0], reserva MAX bytes para 'tel' en t[0], ejecuta 'persona()', inicia la carga de t[1], reserva MAX bytes para 'nom' en t[1], reserva MAX bytes para 'tel' en t[1] y ejecuta 'persona()'. Si declaras el array con 5 structs veras que la funcion se ejecuta 5 veces.

Lo ideal para eso es llamar a la funcion de inicio desde el main; de momento entras los nombres disponibles manualmente y mas adelante seguramente haras un archivo a modo de agenda. Esta funcion que te carga los datos iniciales no puede estar dentro del struct a menos que el struct sea una clase. Si aun no has trabajado con clases puedes quitar la funcion del struct y llamarla desde el main (o si pones una opcion de recargar):

Código:
typedef struct {
    char nom[MAX];
    char telefon[MAX];
} AGENDA;

AGENDA agenda[MP];


void carrega_agenda() {
    for (int i = 0; i < MP; i++)
    {
        cout << "Introdueix el nom i telefon " << " i == " <<i << " < " << MP << " : ";
        cin >> t[i].nom >> t[i].tel;
    }
}


int main() {
    carrega_agenda();

    do {
        ...
    } while...
    
    return 0;
}
Y ya que estas trabajando en c++ tal vez te interese echar un vistazo (ademas de a las clases) a los vectores, te permitira usar una lista de personas no limitada.

Saludos
vosk