ayudaa con pr0grama en c

Iniciado por jj1999A, 4 Diciembre 2020, 11:53 AM

0 Miembros y 1 Visitante están viendo este tema.

jj1999A

alguien me puede decir en que falla. por favor


#include <stdio.h>
#include <stdlib.h>
#define N 20
struct Fecha {
   int dia, mes, año;
};
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].año=f.año;
       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 año: ");
       scanf("%d %d %d",&f.dia,&f.mes,&f.año);
       if(f.dia==0 && f.mes==0 && f.año==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].año);
       }
   }else{printf("\nLista vacia");}
}



MOD: El código debe publicarse utilizando las etiquetas de Código GeSHi

K-YreX

Especifica qué problemas tienes para poder ayudarte.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Danielㅤ

#2
Hola, el único error que ví apenas miré el código, es que tenés una variable "año" y los nombres de variables, funciones, clases, no pueden llevar acentos ni la letra ñ, es más incluso no va a funcionar porque el compilador seguramente dará error, en Python por ejemplo no se puede hacer eso, al menos hasta la versión 2.0 no era posible, de todas formas es una mala práctica.

Podes usar año en vez de año.


Saludos
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

jj1999A

la variable año la tengo como año solo que se ha cambiado al pasarlo aqui. El problema que tengo es que al compilar y ejecutar puede ingresar datos pero luego al querer escribir la lista me salta que esta vacía cuando en realidad he introducido datos.

K-YreX

El error era un poco rebuscado. Y aunque lo que voy a decir no tiene importancia en este caso, cuando se tienen problemas y sobre todo cuando no se sabe de dónde provienen, es preferible copiar y pegar el código tal cual. Muchas veces hay errores tontos que al volver a escribir el programa en el mensaje no se cometen.

En este caso el error está en la función rellenar_lista(). Recibes un puntero a la lista (*l) por lo que llamas a esta función con &l como argumento. Ahora llamas a insertar() que recibe un puntero a la lista pero le pasas como argumento: &l (teniendo en cuenta que l ya es &l), es decir no le estás pasando el puntero a la lista sino la propia dirección de memoria en la que está el puntero, equivaldría a (&&l).
Es por esto que falla. Aunque me parece raro que lo hayas compilado y ejecutado sin problemas ya que a mí me ha saltado un warning al compilar y el programa se ha cerrado en la primera inserción.

Algunos otros consejos:
  • Puedes asignar el valor de evaluar una condición directamente a un int. Así ahorras líneas de if-else:

    int insertado = (l->tam < N);
    int acabar = (f.dia == 0 && f.mes == 0 && f.año == 0);

    Esto asignará un 1 si la condición es cierta y un 0 si es falsa.
  • En la función insertar_lista() creas una variable Fecha que luego pasas a insertar donde la deshaces para insertarla valor por valor. Puedes asignar la variable completa:

    int insertar(struct Lista *l, struct Fecha f){
      int insertado = (l->tam < N);
      if(insertado){
        l->vectorFechas[l->tam] = f;
        l->tam++;
      }
      return insertado;
    }
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;