elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayudaa con pr0grama en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayudaa con pr0grama en c  (Leído 2,716 veces)
jj1999A

Desconectado Desconectado

Mensajes: 2


Ver Perfil
ayudaa con pr0grama en c
« en: 4 Diciembre 2020, 11:53 am »

alguien me puede decir en que falla. por favor

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 20
  4. struct Fecha {
  5.    int dia, mes, año;
  6. };
  7. struct Lista {
  8.    int tam; //Cantidad de valores del array siguiente
  9.    struct Fecha vectorFechas[N];     // Array de fechas
  10. };
  11. void rellenar_lista(struct Lista *l);
  12. void escribir_lista(struct Lista l);
  13. int insertar(struct Lista *l,struct Fecha f);
  14. int main()
  15. {
  16.    struct Lista l;
  17.    l.tam=0;
  18.    rellenar_lista(&l);
  19.    escribir_lista(l);
  20.    return 0;
  21. }
  22.  
  23. int insertar(struct Lista *l,struct Fecha f){
  24.    int insertado=1;
  25.    if(l->tam<N){
  26.        l->vectorFechas[l->tam].dia=f.dia;
  27.        l->vectorFechas[l->tam].mes=f.mes;
  28.        l->vectorFechas[l->tam].año=f.año;
  29.        l->tam++;
  30.    }else{insertado=0;}
  31.    return insertado;
  32. }
  33. void rellenar_lista(struct Lista *l){
  34.    int acabar=0;
  35.    struct Fecha f;
  36.    printf("Introduce fechas, 0 0 0 para acabar.");
  37.    do{
  38.        printf("\nIntroduce dia, mes y año: ");
  39.        scanf("%d %d %d",&f.dia,&f.mes,&f.año);
  40.        if(f.dia==0 && f.mes==0 && f.año==0){
  41.            acabar=1;
  42.        }
  43.        else{
  44.            insertar(&l,f);
  45.        }
  46.    }while(!acabar);
  47. }
  48. void escribir_lista(struct Lista l){
  49.    int i;
  50.    if(l.tam!=0){
  51.        for(i=0;i<l.tam;i++){
  52.            printf("\n\t%02d/%02d/%d",l.vectorFechas[i].dia,l.vectorFechas[i].mes,l.vectorFechas[i].año);
  53.        }
  54.    }else{printf("\nLista vacia");}
  55. }

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


« Última modificación: 4 Diciembre 2020, 12:16 pm por K-YreX » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: ayudaa con pr0grama en c
« Respuesta #1 en: 4 Diciembre 2020, 12:54 pm »

Especifica qué problemas tienes para poder ayudarte.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Danielㅤ


Desconectado Desconectado

Mensajes: 1.681


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: ayudaa con pr0grama en c
« Respuesta #2 en: 4 Diciembre 2020, 13:49 pm »

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
« Última modificación: 4 Diciembre 2020, 13:52 pm por [D]aniel » En línea

jj1999A

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: ayudaa con pr0grama en c
« Respuesta #3 en: 4 Diciembre 2020, 14:30 pm »

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.
 
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: ayudaa con pr0grama en c
« Respuesta #4 en: 5 Diciembre 2020, 00:27 am »

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:
Código
  1. int insertado = (l->tam < N);
  2. 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:
Código
  1. int insertar(struct Lista *l, struct Fecha f){
  2.  int insertado = (l->tam < N);
  3.  if(insertado){
  4.    l->vectorFechas[l->tam] = f;
  5.    l->tam++;
  6.  }
  7.  return insertado;
  8. }
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayudaa..
Scripting
xt-2_ 5 3,988 Último mensaje 8 Julio 2010, 17:19 pm
por winroot
ayudaa!!!
Foro Libre
RedZer 3 2,506 Último mensaje 29 Diciembre 2010, 00:48 am
por RedZer
Ayudaa
Programación C/C++
oskarlander 1 1,764 Último mensaje 6 Junio 2012, 22:15 pm
por x64core
ayudaa
Java
sk1000 1 1,776 Último mensaje 5 Octubre 2012, 04:56 am
por ChavalChavito
AYUDAA
Programación Visual Basic
~TOPO 1 1,502 Último mensaje 18 Marzo 2014, 17:12 pm
por FranciskoAsdf
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines