PROBLEMA CON PROGRAMA (AGENDA)

Peter
12 de Diciembre del 2005
Buenas, tengo un problema con un programa, y es que me dan un monton de errores que no se como soluccionar. El programa me pide que haga una agenda en el que se puedan pedir 2 cosas: meter datoas de una persona y sacar datos de una persona (mediante apellido).

En los datos esta, nombre (izena en euskera), apellido(abizena), telefono fijo y movil (mugikorra) y dia de nacimiento ( año (urtea), mes (hilabetea) y dia (eguna)).

Ya lo siento pero el programa esta en euskera... de todas formas no creo que tengais muxchos problemas para entenderlo una vez sabido lo que tengo que hacer...

Tengo que usar structs, y lo que he pensado es crear un array del tipo de struct que quiero hacer, y en cada hueco del array meter toda esta info ( asi tendre en cada hueco, toda la info de cada persona) pero creo que eso tp lo he exo muy bien.... a ver si me podeis ayudar:

Aquí va el enlace al programa: http://www.rafb.net/paste/results/egMKYR78.html

Un saludo y espero respuestas! Gracias de antemano.

kike
12 de Diciembre del 2005
aqui tienes el programa para poder compilarlo al menos, muchos fallos se debian a asignaciones como
char *str,*str1;
str=str1;
eso no se puede hacer asi hay que usra la funcion strcpy()
strcpy(&str,str1);
y algunas cosillas mas, no he podido depurarlo porque me sale el menu y no lo entiendo, asi que eso es cosa tuya....
aqui tienes el codigo

#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <fstream.h>
#include <ctype.h>
#include <string.h>



struct telefonoa
{
char mugikorra[15];
char fijoa[15];
};

struct jaiotzedata
{
char urtea[5];
char hilabetea[3];
char eguna[3];
};

struct ikasle
{
char izena[20];
char abizena[30];
struct telefonoa telf;
struct jaiotzedata jaio;
};




void Menua();
ikasle Datuakirakurri (ikasle &ikas);
void Datuakpantailaratu(ikasle &ikastmp);




void main()
{
ikasle zerrenda[30]; // se declara asi un array de tipo ikasle?
struct ikasle ikas,ikastmp;
int konta=0,i;
char *abi,x;

do
{
fflush(stdin);
Menua();
x=getchar();
switch (x)
{
case 1:{
zerrenda[konta]=Datuakirakurri(ikas);
konta++;
}
case 2:{
printf("Sartu bistaratu nahi duzun pertsonaren abizena: ");
gets(abi);
for (i=0;i<=konta;i++)
{
ikastmp=zerrenda[i];
if (ikastmp.abizena==abi)
Datuakpantailaratu(ikastmp);
}
free(abi);
}

case 0: printf("Programa bukatzeko <ENTER> sakatun");break;
default: printf("Aukera desegokia!!nn");break;
}
}
while(x!=0);
}


void Menua()
{
printf ("Aukeratu egin nahi duzun eragiketa: n n");
printf ("1: Pertsonaren datuak sartu n");
printf ("2: Pertsona baten datuak bistaratu (abizena sartuz) n");
printf ("0: Progama bukatzeko n");
}

ikasle Datuakirakurri (ikasle &ikas)
{
char *izen,*abizen,*fijo,*mugikor,*urte,*hile,*egun;

printf ("Sartu Izena: ");
gets(izen);
izen=strdup(izen);
strcpy(ikas.izena,izen);
free(izen);

printf ("Sartu Abizena: ");
gets(abizen);
abizen=strdup(abizen);
strcpy(ikas.abizena,abizen);
free(abizen);

printf ("Sartu telefono fijoa: ");
gets(fijo);
fijo=strdup(fijo);
strcpy(ikas.telf.fijoa,fijo);
free(fijo);

printf ("Sartu telefono mugikorra: ");
gets(mugikor);
mugikor=strdup(mugikor);
strcpy(ikas.telf.mugikorra,mugikor);
free(mugikor);

printf ("Sartu jaiotze urtea: ");
gets(urte);
urte=strdup(urte);
strcpy(ikas.jaio.urtea,urte);
free(urte);

printf ("Sartu jaiotze hilabetea: ");
gets(hile);
hile=strdup(hile);
strcpy(ikas.jaio.hilabetea,hile);
free(hile);

printf ("Sartu jaiotze eguna: ");
gets(egun);
egun=strdup(egun);
strcpy(ikas.jaio.eguna,egun);
free(egun);
return ikas;
}


void Datuakpantailaratu(ikasle &ikastmp)
{
char *izen,*abizen,*fijo,*mugikor,*urte,*hile,*egun;

izen=ikastmp.izena;
printf ("Izena: %s n",izen);
free(izen);

abizen=ikastmp.abizena;
printf ("Abizena: %s n",abizen);
free(abizen);

fijo=ikastmp.telf.fijoa;
printf ("Telefono fijoa: %s n",fijo);
free(fijo);

mugikor=ikastmp.telf.mugikorra;
printf ("Telefono mugikorra: %s n",mugikor);
free(mugikor);

urte=ikastmp.jaio.urtea;
printf ("Jaiotze urtea: %s n",urte);
free(urte);

hile=ikastmp.jaio.hilabetea;
printf ("Jaiotze hilabetea: %s n",hile);
free(hile);

egun=ikastmp.jaio.eguna;
printf ("Jaiotze eguna: %s n",egun);
free(egun);
}


Un saludo

Peter
12 de Diciembre del 2005
ahora me da errores a la hora de ejecutarlo, tendre que mirarlo. hay una cosa que no entiendo... porque al usar la funcion usas esto? :
(ikasle &ikastmp)

un saludo.

Peter
12 de Diciembre del 2005
tengo otro problema... a lahora de ejecutarlo se me queda pillado al meter el apellido ( en la funcion datuakirakurri, se keda blokeado al hacer gets abizen y no se a que se debe ).

un saludo y gracias!

kike
12 de Diciembre del 2005
en cuanto a lo primero, lo que significa el & es que le pasas una referencia del parametro, para que los cambios que realice la funcion se mantengan al salir de esta.
En cuanto a lo segundo, cuando captures una frase del usuario, en lugar de usar gets(), usa cin.getline(), que va mejor

kike
12 de Diciembre del 2005
perdon el cin.getline() es c++ y tu usas c,¿cierto?

Peter
12 de Diciembre del 2005
pues creo que es c, pero de todas formas esa funcion no la conozco... asi que se supone que no puedo utilizarla.

alguna otra opcion? un saludo y gracias!