Autor
|
Tema: alguien me puede decir en que falla (Leído 4,931 veces)
|
ZetanChamp
Desconectado
Mensajes: 2
|
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");} }
|
|
|
En línea
|
|
|
|
ZetanChamp
Desconectado
Mensajes: 2
|
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
Mensajes: 236
|
No tengo mucha idea en C/C++, pero diria que te falta un asterisco (puntero) void rellenar_lista(struct Lista *l){ pero .... void escribir_lista(struct Lista l){ , aqui no aparece asterisco
|
|
|
En línea
|
|
|
|
EdePC
|
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*'#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");} }
Si analizas: 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); }
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 lSolución: Reemplaza tu línea 44 a: 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
Mensajes: 1.822
🔵🔵🔵🔵🔵🔵🔵
|
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
|
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
Mensajes: 1.822
🔵🔵🔵🔵🔵🔵🔵
|
CLion, ese si que es un gran compilador 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
Mensajes: 243
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
alguien me puede decir...
Diseño Gráfico
|
johnwmartinez
|
5
|
3,097
|
15 Mayo 2005, 00:42 am
por MinusFour
|
|
|
Alguien me puede decir que es esta información?
Redes
|
anonimo12121
|
7
|
3,783
|
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,284
|
14 Abril 2014, 16:49 pm
por basickdagger
|
|
|
Alguien me puede decir que esta mal.
Java
|
padiuwu
|
5
|
2,823
|
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,564
|
15 Diciembre 2018, 02:19 am
por apuromafo CLS
|
|