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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


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

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Archivo de Estructuras en C
« en: 1 Octubre 2014, 00:50 am »

Saludos! quisiera saber como guardar estructuras en un archivo de texto plano, para luego cargarlas al momento que se ejecute mi programa y que este archivo se vaya sobrescribiendo en base a lo que modifique en mi programa. De antemano muchas gracias ;D


En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Archivo de Estructuras en C
« Respuesta #1 en: 1 Octubre 2014, 00:59 am »

Mírate la entrada y salida de ficheros en C/C++ , luego solo es una función para escribir y otra para leer, y si acaso una para modificar. Intentalo y si no te sale nosotros te ayudaremos encantados.

Saludos.


« Última modificación: 1 Octubre 2014, 01:11 am por avesudra » En línea

Regístrate en
uNolex1

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Archivo de Estructuras en C
« Respuesta #2 en: 1 Octubre 2014, 19:09 pm »

He intentado hacer mi función guardar pero no me guarda lo que quiero guardar, por ejemplo en mi programa puedo crear cibercafes con una dirección un precio (por min de internet), etc mi funcion de prueba seria esta para guardar en un archivo "cibercafes" solo la dirección de un cibercafe creado
Código:
void Guardar(){
struct cibercafe *cib;
cib=(struct cibercafe *) malloc (sizeof(struct cibercafe));
FILE *arch;
scanf("%s",cib->direccion);
arch=fopen("cibercafes", "a");
fprintf(arch,"Dirección: %s\n",cib->direccion);
fclose(arch);
}

pero cuando llamo a la función guardar en el archivo aparece solo "Dirección:" y no el nombre que le puse  :-\

Edit: ya vi el problema le estoy pidiendo al usuario que ingrese los datos, como hago para que los datos que  están se guarden automáticamente mientras el programa esta corriendo?

« Última modificación: 1 Octubre 2014, 19:29 pm por uNolex1 » En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Archivo de Estructuras en C
« Respuesta #3 en: 1 Octubre 2014, 23:24 pm »

Hola buenas noches, no estaría de más que pusieses tu estructura cibercafes para saber cómo es y ayudarte mejor. Es evidente que si no ingresas ningún dato ni pasas ningún dato a la función te va a guardar un hueco en blanco.

Puedes ir pidiendo en un while o en un for los datos de las estructuras hasta que el usuario quiera parar y mientras los vas guardando con lo que has puesto. A ver si puedo dar ahora algo más que palabras.


Puedo darte este ejemplo, pero la función de leer la intentas hacer tú:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. //Estructuras
  5.  
  6. struct _cibercafe{
  7.    int id;
  8.    char direccion[30];
  9. };
  10.  
  11. typedef struct _cibercafe cibercafe;
  12.  
  13. //Declaraciones de funciones
  14.  
  15. void pedirDatos();
  16. void escribirDatos(cibercafe *data);
  17.  
  18. int main()
  19. {
  20.    pedirDatos();
  21.    return 0;
  22. }
  23. void pedirDatos()
  24. {
  25.    char answer = 'y';
  26.    int id = 0;
  27.    do{
  28.        cibercafe *tmpData = malloc(sizeof(cibercafe));
  29.        tmpData->id = id;
  30.        printf("Ingrese la direccion del cibercafe:");
  31.        scanf("%s",tmpData->direccion);
  32.        escribirDatos(tmpData);
  33.        free(tmpData);
  34.        printf("Desea continuar ingresando datos? y/n");
  35.        answer = getchar();
  36.        answer = getchar();
  37.        ++id;
  38.  
  39.    }while(answer == 'y');
  40. }
  41. void escribirDatos(cibercafe *data)
  42. {
  43. FILE *file;
  44. file = fopen("cibercafes", "a");
  45. fprintf(file,"%d&%s,",data->id,data->direccion);
  46. fclose(file);
  47. }
Saludos.
« Última modificación: 2 Octubre 2014, 01:32 am por avesudra » En línea

Regístrate en
uNolex1

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Archivo de Estructuras en C
« Respuesta #4 en: 2 Octubre 2014, 05:30 am »

Edit: ese código era obsoleto por eso lo borre
« Última modificación: 14 Octubre 2014, 23:35 pm por uNolex1 » En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Archivo de Estructuras en C
« Respuesta #5 en: 2 Octubre 2014, 19:14 pm »

Buenas tardes uNolex1, veo que tienes un poco de problema a la hora de comprender la programación estructurada y quizás por eso tu programa, a pesar de tus intentos, no hace lo que te propones. Yo quiero que aprendas bien así que si no te importa no te voy a dar código (cosa que además está un poco penado aquí) , simplemente las pautas, y ya si te atascas un poco te echo una mano.

Un consejito, cuando pongas código, en el editor de mensaje hay algo en lo que pone GeSHi elige C y entre los corchetes pones tu código, es para resaltar la sintaxis de tu código en C y en varios lenguajes de programación.

Vamos a ver, tu quieres guardar una estructura ¿no? Sí, bien, pues entonces tu creas el puntero y le das un espacio en memoria ¡Pero no puedes guardar la estructura inmediatamente después sin pedir los datos! En ese caso la estructura estará vacía y no te quedará nada en el archivo a pesar de que tu función para guardar la estructura está bien ¡pero la estructura está completamente vacía!

En ese caso ¿qué debes hacer para guardar la estructura?

Pasos:
  • Definir un puntero a esa estructura.
  • Darle memoria a esa estructura.
  • PEDIR LOS DATOS Y GUARDARLOS EN LA ESTRUCTURA <-- Esta parte es la que te falta si te das cuenta.
  • Guardar la estructura que has llenado con los datos que has pedido en un fichero.

No hay más, puedo intentar explicartelo de otra manera si no lo comprendes, y en el caso más extremo te daré un poquito de código a ver si así lo vas comprendiendo ¿va?

PD: Un consejo, haz un pequeño programa de prueba guardando una estructura sencilla, una vez comprendas como hacerlo con una y entiendas la dinámica entonces atrévete a poner más de una.

Un cordial saludo.
« Última modificación: 2 Octubre 2014, 19:21 pm por avesudra » En línea

Regístrate en
uNolex1

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Archivo de Estructuras en C
« Respuesta #6 en: 3 Octubre 2014, 05:35 am »

Tengo esto pero me tira error de segmento :/ No se si estoy bien encaminado  :o

Código
  1. void Guardar(){
  2. struct computador *auxiliar_contador_pc;
  3.    struct cibercafe *auxiliar_contador_ciber;
  4.    int cant_pc=0;
  5. int cant_servidor=0;
  6.    auxiliar_contador_ciber=primero;
  7. FILE *arch;
  8. arch=fopen("cibercafes", "a");
  9. while(auxiliar_contador_ciber !=NULL){
  10.        fputs("&&", arch);
  11. fprintf(arch, "%d",auxiliar_contador_ciber->id_ciber);
  12. fputs("&&", arch);
  13. fprintf(arch, "%s",auxiliar_contador_ciber->direccion);
  14. fputs("&&", arch);
  15. fprintf(arch, "%d",auxiliar_contador_ciber->precio);
  16. fputs("&&", arch);
  17. fprintf(arch, "%d",auxiliar_contador_ciber->recaudado);
  18.        fputs("\n", arch);
  19.        auxiliar_contador_pc=auxiliar_contador_ciber -> primer_pc;
  20.        while(auxiliar_contador_pc->siguiente_pc!=NULL){
  21.            auxiliar_contador_pc=auxiliar_contador_pc -> siguiente_pc;
  22.            fputs("@@", arch);
  23.            fprintf(arch, "%d",auxiliar_contador_pc->num_pc);
  24.            fputs("@@", arch);
  25.            fprintf(arch, "%s",auxiliar_contador_pc->sistema_operativo);
  26.            fputs("@@", arch);
  27.            fprintf(arch, "%d",auxiliar_contador_pc->espacio_almacenamiento);
  28.            fputs("@@", arch);
  29.            fprintf(arch, "%d",auxiliar_contador_pc->disponible);
  30.            fputs("@@", arch);
  31.            fprintf(arch, "%d",auxiliar_contador_pc->tipo);
  32.            fputs("@@", arch);
  33.            fprintf(arch, "%d",auxiliar_contador_pc->num_conexiones);
  34.            fputs("@@", arch);
  35.            }
  36.  
  37.   fclose(arch);
  38.   arch=fopen("cibercafes", "a");
  39.    }
  40. fclose(arch);
  41. return;
  42. }
  43.  

Los && y @@ son mis "separadores" para saber que despues de && son datos de ciber y @@ son de PC
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Archivo de Estructuras en C
« Respuesta #7 en: 3 Octubre 2014, 14:59 pm »

Sí, vas bien encaminado pero te falta lo que ya te dije en el mensaje anterior. ¿Cuando le pides al usuario el id del ciber por ejemplo? ¿No ves que te falta en el code? La estructura que estás escribiendo está VACÍA , tienes que rellenarla pidiendo los datos al usuario.

Para serte mas concreto, no hay ningún scanf ni nada para pedirle al usuario absolutamente ningún dato del ciber.
« Última modificación: 3 Octubre 2014, 15:09 pm por avesudra » En línea

Regístrate en
uNolex1

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Archivo de Estructuras en C
« Respuesta #8 en: 3 Octubre 2014, 18:39 pm »

No es necesario el scanf eso lo escribo al ejecutar el programa, que tiene esta forma:

=~=~=~=~= Menu =~=~=~=~=
1: Abrir Cibercafe
2: Instalar Computador
3: Cerrar Cibercafe
4: Desechar Computador
5: Listar Cibercafes
6: Listar Computadores
7: Asignar Computador
8: Desocupar Computador
9: Guardar
11: Salir
=~=~=~=~==~=~=~=~==~=~=~=~=
Ingrese Opcion:

Entonces para probar la opcion guardar abro un ciber (le asigno sus respectivos datos), luego instalo un computador en tal ciber(tambien le asigno sus datos), todos los datos los asigno cuando ejecuto el programa pero cuando doy a la opción guardar me los guarda pero queda atascado en el primer while de la funcion Guardar() ya no me da error de segmento  :-\
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Archivo de Estructuras en C
« Respuesta #9 en: 3 Octubre 2014, 20:21 pm »

Bien, vamos a ver tú al abrir un cibercafé llamas a la función que lo crea pero esa información se pierde cuando sales de esa función, entonces luego eliges que la guarde ¡pero esa información ya no está!, estás haciendo la casa por el tejado.

Primero tienes que hacer la función que crea los cibercafés ¡pero no perder los datos! ¡En la función guardar has creado una nueva variable que es distinta a la anterior! Primero intenta no perder esa información y luego ya intentarás hacer la función de guardar.

Por favor revisa los ámbitos en los que las variables son accesibles.Este enlace te servirá, habla de C++ pero en esta parte es exactamente igual que en C:

http://c.conclase.net/curso/?cap=006

Un saludo.
« Última modificación: 3 Octubre 2014, 20:23 pm por avesudra » En línea

Regístrate en
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Estructuras.....
Programación C/C++
Rodri 1 2,523 Último mensaje 6 Octubre 2011, 19:46 pm
por satu
Estructuras en C++
Programación C/C++
jjrl1984 1 1,687 Último mensaje 18 Diciembre 2012, 02:27 am
por naderST
Estructuras en C
Programación C/C++
Redisteon 1 1,585 Último mensaje 10 Agosto 2013, 10:39 am
por Eternal Idol
Estructuras en C
Programación C/C++
Redisteon 4 2,215 Último mensaje 11 Agosto 2013, 19:25 pm
por amchacon
Estructuras en C « 1 2 »
Programación C/C++
Yc 12 4,484 Último mensaje 23 Marzo 2014, 15:07 pm
por Yc
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines