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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


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

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Guardar variables en ficheros C
« en: 16 Diciembre 2013, 00:19 am »

Hola, probablemente me recordéis del anterior post "Ayuda con struct en C". he creado esto en un tema aparte por que ya había dado por cerrado el otro (gracias a Amchacon por la ayuda), pero si debería haberlo añadido al anterior tema, lo siento.

Tengo ya el programa casi acabado pero tengo una ultima duda sobre los ficheros, que se me están resistiendo  :(  

partimos de este código:
Citar

#include <stdio.h>
#include <stdlib.h>
    
    struct jugadas
     {
       int f;
       int c;
     }jugadas;


int main(int argc, char *argv[]) {

//[...] codigo intermedio [...]
}

int funcion(int c, int f)
{
 int fa;
 int ca;
        FILE *fjugadas;
        fjugadas=fopen("ia.txt","r+");
        if(fjugadas!=NULL)
       {
      while(!feof(fjugadas))
        {
         if(fread(&jugadas,sizeof(jugadas),1,fjugadas))
          {
            fa=jugadas.f;
            ca=jugadas.c;
          }
        }
       }
// y aqui es donde viene mi duda (ver abajo)

 fclose(fjugadas);

}

Vale, ahora que estamos situados, mi duda es como puedo hacer para que ahora que he almacenado los datos del fichero en las variables "fa" y "ca", sobrescribir el fichero con los valores de "f" y "c" para que la próxima vez que llame a esta función los valores del fichero que pasen a "fa" y "ca" sean los que ahora mando como "f" y "c". Espero haberme explicado bien.

He intentado de numerosas formas pero no consigo sobrescribir con el contenido de las variables.
Probablemente este totalmente errado pero ¿no seria algo tal que así?
Citar
int fputc(int fa, FILE *fjugadas);
o
Citar
fprintf (jugadas.f, "%d",&f);

Muchas gracias por la ayuda de antemano


« Última modificación: 16 Diciembre 2013, 00:22 am por nyper01 » En línea

xiruko


Desconectado Desconectado

Mensajes: 437


Ver Perfil
Re: Guardar variables en ficheros C
« Respuesta #1 en: 16 Diciembre 2013, 01:41 am »

Si en el fichero solamente tienes esas dos variables y quieres modificarlas las dos podrías usar la función rewind(). Lo que consigues con esta función es situar en el inicio el cursor asociado al fichero, por lo que la próxima vez que escribas en él sobrescribirás lo que haya, en lugar de añadirlo al final.

Si tuvieras muchas variables y solo quisieras modificar unas cuantas, deberás jugar con las funciones fsetpos(), fgetpos() y fseek() para ir moviendo el cursor del fichero hacia donde quieras leer y/o escribir.

Saludos.


En línea

nyper01

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Guardar variables en ficheros C
« Respuesta #2 en: 16 Diciembre 2013, 03:55 am »

Gracias por la respuesta, pero no me has solucionado nada. igual es que no te he entendido.
Segun tengo entendido con abrir el fichero como
Citar
fjugadas=fopen("ia.txt","r+");
con la "r+" de "lectura y escritura" ya me destruye todo lo que hubiera anteriormente escrito (si no es asi, con w+ si que debería hacérmelo, ¿no?)

Mi verdadera duda esta en como hacer que me almacene el valor de la variable, es que no consigo hacer que me escriba nada.
En otro lado del programa pido al usuario que me escriba algo y eso si que me lo almacena en otro fichero, pero ¿como almaceno algo que no me han escrito?, el valor de una variable INT para ser mas exacto.

De todas formas, muchas gracias por tu tiempo, valoro mucho a la gente que ayuda así    :D
En línea

xiruko


Desconectado Desconectado

Mensajes: 437


Ver Perfil
Re: Guardar variables en ficheros C
« Respuesta #3 en: 16 Diciembre 2013, 13:36 pm »

Citar
Gracias por la respuesta, pero no me has solucionado nada. igual es que no te he entendido.

Sin ofender, pero yo añadiría a eso las ganas que te lo den todo hecho. Si te miras el ejemplo que hay en en enlace de la función fgetpos() lo entenderás. Entiendo que es mucho trabajo copiar y pegar el código, compilarlo, y correrlo tú mismo para hacer la prueba, así que te dejo el código y la salida aquí:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.  char nombre[11] = "datos4.dat",
  6.       mensaje[81]="Esto es nua rpueba usando fgetpos y fsetpos.";
  7.  FILE *fichero;
  8.  fpos_t posicion=0, comienzo;
  9.  
  10.  fichero = fopen( nombre, "w+" );
  11.  printf( "Fichero: %s -> ", nombre );
  12.  if( fichero )
  13.    printf( "creado (ABIERTO)\n" );
  14.  else
  15.  {
  16.    printf( "Error (NO ABIERTO)\n" );
  17.    return 1;
  18.  }
  19.  
  20.  fgetpos( fichero, &comienzo );
  21.  printf( "Posicion del fichero: %d\n", posicion );
  22.  
  23.  fprintf( fichero, mensaje );
  24.  printf( "\nEscrito: \"%s\"\n", mensaje );
  25.  
  26.  fgetpos( fichero, &posicion );
  27.  printf( "Posicion del fichero: %d\n", posicion );
  28.  
  29.  fsetpos( fichero, &comienzo );
  30.  fprintf( fichero, "%s", "Esto es una prueba" );
  31.  printf( "Corregiendo errores...Escrito: \"Esto es una prueba\"\n" );
  32.  
  33.  fgetpos( fichero, &posicion );
  34.  printf( "Posicion del fichero: %d\n", posicion );
  35.  
  36.  rewind( fichero );
  37.  printf( "\"Rebobinando\" el fichero -> Vuelta al comienzo\n" );
  38.  fgetpos( fichero, &posicion );
  39.  printf( "Posicion del fichero: %d\n", posicion );
  40.  
  41.  printf( "\nLeyendo del fichero \"%s\"\n", nombre );
  42.  fgets( mensaje, 81, fichero );
  43.  printf( "\"%s\"\n\n", mensaje );
  44.  
  45.  fgetpos( fichero, &posicion );
  46.  printf( "Posicion del fichero: %d\n", posicion );
  47.  
  48.  if( !fclose(fichero) )
  49.    printf( "Fichero cerrado\n" );
  50.  else
  51.  {
  52.    printf( "Error: fichero NO CERRADO\n" );
  53.    return 1;
  54.  }
  55.  
  56.  return 0;
  57. }

Y su salida:
Código:
:~$ ./fichero
Fichero: datos4.dat -> creado (ABIERTO)
Posicion del fichero: 0

Escrito: "Esto es nua rpueba usando fgetpos y fsetpos."
Posicion del fichero: 44
Corregiendo errores...Escrito: "Esto es una prueba"
Posicion del fichero: 18
"Rebobinando" el fichero -> Vuelta al comienzo
Posicion del fichero: 0

Leyendo del fichero "datos4.dat"
"Esto es una prueba usando fgetpos y fsetpos."

Posicion del fichero: 44
Fichero cerrado

Y qué sacamos de todo esto? Tú cuando abres un fichero el cursor asociado a él estaría en la posición 0. Si con fgets(), o la función que sea, lees 10 carácteres (por ejemplo, los correspondientes a tus variables), entonces el cursor avanzará a la posición 10. Si luego quieres sobrescribir las variables que tenías, deberás hacer retroceder el cursor, con rewind(), con fsetpos() o con fseek() (no será porque no tengas opciones), para así cuando escribas las variables éstas sobrescriban a las que habían.

Citar
Mi verdadera duda esta en como hacer que me almacene el valor de la variable, es que no consigo hacer que me escriba nada.
fprintf()

Un saludo.
En línea

nyper01

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Guardar variables en ficheros C
« Respuesta #4 en: 16 Diciembre 2013, 17:24 pm »

En primer lugar no me había fijado que eran hipervinculos los nombre de las funciones.
Y en segundo lugar, ya he dicho que soy un estudiante de primero, que aun no se mucho sobre programación, así que no es afán por que me lo den todo hecho, si no que, si solo me das el nombre de la función y este me lleva a complejas explicaciones que meten otras que no conozco, por mucho que intento entenderla no lo consigo.
Ni si quiera se por ejemplo que tipo de fichero es un ".dat" ni que diferencia tiene almacenar los datos en un fichero de este tipo en vez de un ".txt"
Por eso, había escrito el código que yo tenia, para ver si alguien podía recomendarme la forma mas sencilla de hacerlo con unas lineas similares a las mias, que son las que me han enseñado por ahora, y con las que me siento seguro al conocerlas.
Gracias por  ofrecerme el código hecho con un montón de cosas que no entiendo, pero yo lo único que buscaba es un pequeño empujón o retoque a lo que yo había puesto para así poder aprender y entender por que son así las cosas.

De todas formas a base de hace pruebas ya he logrado sacarlo, cambiando la extension del fichero y alguna cosa mas. Muchas gracias
« Última modificación: 16 Diciembre 2013, 17:34 pm por nyper01 » En línea

xiruko


Desconectado Desconectado

Mensajes: 437


Ver Perfil
Re: Guardar variables en ficheros C
« Respuesta #5 en: 16 Diciembre 2013, 20:45 pm »

Citar
Ni si quiera se por ejemplo que tipo de fichero es un ".dat" ni que diferencia tiene almacenar los datos en un fichero de este tipo en vez de un ".txt"

Te propongo algo: cambia la extensión de tu archivo por ".miextension", o por ".quepasasipongoestoasi", y prueba a correr el programa.

Citar
Gracias por  ofrecerme el código hecho con un montón de cosas que no entiendo, pero yo lo único que buscaba es un pequeño empujón o retoque a lo que yo había puesto para así poder aprender y entender por que son así las cosas.

Qué hay mejor para entender las cosas que leerte la teoría a la vez que miras ejemplos? Tú tenías una duda y te di las herramientas necesarias para solventarla. Vale, no te di código, me daba pereza, pero es que había código de sobras en los enlaces.

Citar
De todas formas a base de hace pruebas ya he logrado sacarlo, cambiando la extension del fichero y alguna cosa mas.

Me alegro, esa es la actitud.

Un saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Variables globales en ficheros .h
Programación C/C++
Kherom 3 5,957 Último mensaje 20 Enero 2012, 04:04 am
por rir3760
crear varios ficheros con variables
Programación C/C++
gAb1 4 1,493 Último mensaje 18 Abril 2013, 01:39 am
por gAb1
guardar estructuras en ficheros
Programación C/C++
pedroedlp 6 2,255 Último mensaje 23 Abril 2014, 19:24 pm
por pedroedlp
Como guardar un índice de ficheros
.NET (C#, VB.NET, ASP)
Bob_Ale 3 1,445 Último mensaje 14 Octubre 2015, 08:31 am
por Bob_Ale
Manejar ficheros en variables
Programación C/C++
Jano4 3 1,137 Último mensaje 24 Febrero 2016, 14:21 pm
por Jano4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines