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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  alguien me puede decir en que falla
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: alguien me puede decir en que falla  (Leído 5,287 veces)
ZetanChamp

Desconectado Desconectado

Mensajes: 2


Ver Perfil
alguien me puede decir en que falla
« en: 5 Agosto 2024, 04:58 am »

por favor

Código:
#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");}
}


En línea

ZetanChamp

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: alguien me puede decir en que falla
« Respuesta #1 en: 5 Agosto 2024, 04:59 am »

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

Mr.Byte

Desconectado Desconectado

Mensajes: 241



Ver Perfil
Re: alguien me puede decir en que falla
« Respuesta #2 en: 5 Agosto 2024, 09:13 am »

No tengo mucha idea en C/C++, pero diria que te falta un asterisco (puntero)
Código:
void rellenar_lista(struct Lista *l){
pero ....
Código:
void escribir_lista(struct Lista l){
, aqui no aparece asterisco
En línea

EdePC
Moderador Global
***
Conectado Conectado

Mensajes: 2.159



Ver Perfil
Re: alguien me puede decir en que falla
« Respuesta #3 en: 5 Agosto 2024, 16:26 pm »

Si estás usando un IDE decente como CLion te debería mandar la alerta en la línea 44:

Expression of type 'Lista**' is implicitly converted to incompatible pointer type 'Lista*'

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 20
  4. struct Fecha {
  5.    int dia, mes, anio;
  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].anio=f.anio;
  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 anio: ");
  39.        scanf("%d %d %d",&f.dia,&f.mes,&f.anio);
  40.        if(f.dia==0 && f.mes==0 && f.anio==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].anio);
  53.        }
  54.    }else{printf("\nLista vacia");}
  55. }

Si analizas:

Código
  1. void rellenar_lista(struct Lista *l){
  2.    int acabar=0;
  3.    struct Fecha f;
  4.    printf("Introduce fechas, 0 0 0 para acabar.");
  5.    do{
  6.        printf("\nIntroduce dia, mes y anio: ");
  7.        scanf("%d %d %d",&f.dia,&f.mes,&f.anio);
  8.        if(f.dia==0 && f.mes==0 && f.anio==0){
  9.            acabar=1;
  10.        }
  11.        else{
  12.            insertar(&l,f);
  13.        }
  14.    }while(!acabar);
  15. }

Ves que esta función recibe como parámetro una estructura como puntero, luego en su línea 12 llamas a la función/procedimiento: insertar quien recibe como parámetros un puntero a una estructura y una estructura: int insertar(struct Lista *l,struct Fecha f){

Es detalle es que l en la función/procedimiento rellenar_lista ya es un puntero y a insertar le estarías enviando el puntero del puntero de l

Solución: Reemplaza tu línea 44 a:

Código
  1. insertar(l,f);

Porque l ya es un puntero y es lo que necesita esa función, y f es una estructura tal cual requiere también esa función
« Última modificación: 5 Agosto 2024, 21:41 pm por EdePC » En línea

Danielㅤ


Desconectado Desconectado

Mensajes: 1.837


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: alguien me puede decir en que falla
« Respuesta #4 en: 5 Agosto 2024, 20:01 pm »

Hola, nunca uses letras con acentos en los nombres de variables, funciones o clases porque son considerados caracteres especiales y no son nada recomendable usarlos y seguramente te darán problemas.

En éste caso debes reemplazar la variable de nombre año por anio que es lo más similar e incluso también suena igual al pronunciar la palabra.

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.

Ohh vaya si que es cierto, el foro te cambia la palabra anio por año, entonces en tu código podes haber usado anio y el corrector del foro la cambió.


Saludos

PD: Si se preguntan cómo he logrado que el corrector no modifique la palabra, pueden citar mi post y verán como lo hice.
« Última modificación: 5 Agosto 2024, 20:26 pm por Danielㅤ » En línea

EdePC
Moderador Global
***
Conectado Conectado

Mensajes: 2.159



Ver Perfil
Re: alguien me puede decir en que falla
« Respuesta #5 en: 5 Agosto 2024, 21:32 pm »

Hola, nunca uses letras con acentos en los nombres de variables, funciones o clases porque son considerados caracteres especiales y no son nada recomendable usarlos y seguramente te darán problemas.

En éste caso debes reemplazar la variable de nombre año por anio que es lo más similar e incluso también suena igual al pronunciar la palabra.

Ohh vaya si que es cierto, el foro te cambia la palabra anio por año, entonces en tu código podes haber usado anio y el corrector del foro la cambió.


Saludos

PD: Si se preguntan cómo he logrado que el corrector no modifique la palabra, pueden citar mi post y verán como lo hice.

Lo raro es que CLion no se hace problemas y compila/ejecuta tranquilamente variables con ñ XD.

Le echaré un ojo al corrector, no veo que esté mal si ignora lo que sea código o geshi, pero si lo hace mejor lo deshabilito

---
Sí lo reemplaza sin importar donde se ponga, mmm... considerando de que anio se usa más a propósito y que el reemplazo se hace siempre mejor "deshabilito" esa regla. Salvo que la gente empiece a abusar de su uso indebido no debería haber problemas XD
En línea

Danielㅤ


Desconectado Desconectado

Mensajes: 1.837


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: alguien me puede decir en que falla
« Respuesta #6 en: 6 Agosto 2024, 00:36 am »

CLion, ese si que es un gran compilador  ;D para no dar error de compilación ni mucho menos error en runtime es muy bueno.

Acabo de hacer la prueba y si reemplaza la palabra anios por años tanto en las etiquetas de código común/general, como la de GeShi, pero éste comportamiento no debería pasar porque el texto en los posts es la escritura y es correcto que haga el reemplazo, pero no lo que está dentro de las etiquetas de código porque son justamente códigos de programación.

Deshabilitarlo no creo que sea para tanto, simplemente eliminar esas 2 palabras sería suficiente.
En línea

RayR

Desconectado Desconectado

Mensajes: 243


Ver Perfil
Re: alguien me puede decir en que falla
« Respuesta #7 en: 6 Agosto 2024, 21:31 pm »

Es verdad que no es recomendable usar eñes o acentos en los nombres de identificadores. Y eso que desde hace más de 10 años los estándares de C y C++ definen un buen rango de caracteres Unicode válidos, entre los cuales están vocales con acento y la ñ, por lo que no tiene nada de extraño que los compiladores modernos los acepten, de hecho es lo esperado. El problema viene más bien con los editores de código y los IDEs, pues aunque la mayoría trabajan sin problemas con Unicode, hay que asegurarse de que usen exactamente la misma codificación que el compilador que vamos a usar. En cambio, si nos limitamos únicamente a los caracteres ASCII estándar de toda la vida, nunca tendremos problemas.

Y por cierto, no confundamos compiladores con IDEs, que son cosas completamente diferentes. Eso ocasiona muchos problemas entre principiantes. Aquí mismo en el foro he visto cualquier cantidad de hilos donde el problema es justo ése, y luego les dan "soluciones" completamente erróneas debido a que ni quien preguntó ni quien contestó entendían esa diferencia. CLion es sólo un IDE. Los compiladores son GCC, Clang, Visual C++, MinGW, entre otros, y los IDEs simplemente los invocan, evitándonos teclear comandos. Si en Windows CLion incluye MinGW, es sólo para conveniencia del usuario, ya que son herramientas completamente independientes. La idea es que cada uno configure su IDE para que use el compilador que prefiera. Incluso en el caso del propio CLion, si lo usamos con MSVC, es casi seguro que el código con eñes así, de inicio, no va a compilar, ya que, a diferencia de MinGW, MSVC espera que los archivos fuente, si tienen caracteres no ASCII, incluyan marca de orden de bytes, pero los editores/IDEs no suelen ponerla de forma predeterminada, por lo que habría que cambiar manualmente eso en la configuración.

Pero reitero, si omitimos caracteres "especiales", nos facilitamos mucho las cosas y ni siquiera necesitamos saber nada de lo anterior. Bueno, salvo la distinción IDE/compilador: eso sí es indispensable tenerlo bien claro, especialmente si programamos en C o C++.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
alguien me puede decir...
Diseño Gráfico
johnwmartinez 5 3,111 Último mensaje 15 Mayo 2005, 00:42 am
por MinusFour
Alguien me puede decir que es esta información?
Redes
anonimo12121 7 3,802 Último mensaje 9 Mayo 2011, 22:39 pm
por T0rete
Alguien me puede decir que es esto?
Dispositivos Móviles (PDA's, Smartphones, Tablets)
Proweb 1 2,293 Último mensaje 14 Abril 2014, 16:49 pm
por basickdagger
Alguien me puede decir que esta mal.
Java
padiuwu 5 2,838 Último mensaje 1 Septiembre 2018, 22:59 pm
por aleman026
Alguin que sepa de python3 me puede decir que falla de mi codigo pq no lo veo
Programación General
Weng Weng 3 2,576 Último mensaje 15 Diciembre 2018, 02:19 am
por apuromafo CLS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines