[ Foro de C ]
hola,quisiera saber en que falla mi codigo. Gracias:
#include <stdio.h>
#include <stdlib.h>
#define N 20
struct Fecha {
int dia, mes, anio;
};
struct Lista {
int tam; //Cantidad de valores del array siguiente
struct Fecha vectorFechas[N]; // Array de fechas
};
void rellenar_lista(struct Lista *l);
void escribir_lista(struct Lista l);
int insertar(struct Lista *l,struct Fecha f);
int main()
{
struct Lista l;
l.tam=0;
rellenar_lista(&l);
escribir_lista(l);
return 0;
}
int insertar(struct Lista *l,struct Fecha f){
int insertado=1;
if(l->tam<N){
l->vectorFechas[l->tam].dia=f.dia;
l->vectorFechas[l->tam].mes=f.mes;
l->vectorFechas[l->tam].anio=f.anio;
l->tam++;
}else{insertado=0;}
return insertado;
}
void rellenar_lista(struct Lista *l){
int acabar=0;
struct Fecha f;
printf("Introduce fechas, 0 0 0 para acabar.");
do{
printf("\nIntroduce dia, mes y anio: ");
scanf("%d %d %d",&f.dia,&f.mes,&f.anio);
if(f.dia==0 && f.mes==0 && f.anio==0){
acabar=1;
}
else{
insertar(&l,f);
}
}while(!acabar);
}
void escribir_lista(struct Lista l){
int i;
if(l.tam!=0){
for(i=0;i<l.tam;i++){
printf("\n\t%02d/%02d/%d",l.vectorFechas[i].dia,l.vectorFechas[i].mes,l.vectorFechas[i].anio);
}
}else{printf("\nLista vacia");}
}
hola invitado, en general lo tienes bien salvo quizás cuando llamas a insertar desde rellenar lista, ahí le estas enviando la dirección del puntero y no la dirección de la lista
ya que en insertar l es un puntero y no un doble puntero
resumiendo que sobra el '&' , l ya es un puntero.
tambíen decirte que en escribir lista, no necesitas hacer una copia de la estructura, es mas eficiente enviar la dirección
y que no tiene mucho sentido que insertar devuelva un int si no lo vas a usar
he retocado un poco tu programa para dejarlo un poco a mi gusto, ahí te lo dejo ya que este si compila, al menos a mi ;-)
suerte
#include <stdio.h>
#include <stdlib.h>
#define N 20
enum { no, si };
struct Fecha { int dia, mes, anio; };
struct Lista
{
int tam; // nº de valores del array siguiente
struct Fecha vectorFechas[N]; // Array de fechas
};
void rellenar_lista(struct Lista *l);
void escribir_lista(struct Lista *l);
int insertar(struct Lista *l,struct Fecha f);
int main()
{
struct Lista l;
l.tam=0;
rellenar_lista(&l);
escribir_lista(&l);
return 0;
}
void rellenar_lista(struct Lista *l)
{
int seguir=si;
struct Fecha f;
printf("Introduce fechas, 0 0 0 para acabar.");
do{
printf("\nIntroduce dia, mes y anio: ");
scanf("%d %d %d",&f.dia,&f.mes,&f.anio);
if(f.dia==0 && f.mes==0 && f.anio==0)
seguir=no;
else
insertar(l,f);
}while(seguir);
}
void escribir_lista(struct Lista *l)
{
if(l->tam)
for(int i=0; i<l->tam; i++)
printf("\n\t%02d/%02d/%d\n",
l->vectorFechas[i].dia,
l->vectorFechas[i].mes,
l->vectorFechas[i].anio);
else printf("\nLista vacia\n");
}
int insertar(struct Lista *l,struct Fecha f)
{
int insertado=no;
if(l->tam<N)
{
l->vectorFechas[l->tam].dia=f.dia;
l->vectorFechas[l->tam].mes=f.mes;
l->vectorFechas[l->tam].anio=f.anio;
l->tam++;
insertado=si;
}
return insertado;
}
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)