Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/06/2016, 17:05
braedu555
 
Fecha de Ingreso: febrero-2015
Mensajes: 20
Antigüedad: 9 años, 3 meses
Puntos: 0
¿desplazamiento del apuntador de posición de archivo?

Lenguaje C
Tengo una duda respecto a esto, estuve haciendo un programa para ordenar registros en un archivo de texto de acceso secuencial, y pues para eso tenía que leer y escribir registros constantemente, pero tenía problemas en la lectura del archivo, ya que a veces leía 2 veces el mismo registro.

si pongo varias instrucciones fprintf, los registros se almacenan de forma correcta, igual si pongo varias instrucciones fscanf se leen bien, eso me dice que el apuntador de posición de archivo se desplaza correctamente, pero si hago algo como lo siguiente:

Código C:
Ver original
  1. if((ptr = (fopen("texto2.txt","w+"))) != NULL){ ///abre un archivo de texto para lectura y escritura
  2.        fprintf(ptr, "%d %s %s %.2f\n", 23, "sg", "yf", 2.9); ///escribe el primer registro en el archivo
  3.    
  4.        
  5.        rewind(ptr); ///rebobina
  6.        fscanf(ptr, "%d%s%s%lf", &a, b, c, &e); ///lee el registro ingresado previamente
  7.        printf("%d %s %s %.2f\n", a, b, c, e); ///y lo imprime
  8.        
  9.        printf("\n\n");
  10.       fprintf(ptr, "%d %s %s %.2f\n", 24, "hol", "utr", 3.7); //escribe otro registro
  11.    
  12.  
  13.       rewind(ptr);
  14.       fscanf(ptr, "%d%s%s%lf", &a, b, c, &e); //lee e imprime
  15.       printf("%d %s %s %.2f\n", a, b, c, e); //los
  16.       fscanf(ptr, "%d%s%s%lf", &a, b, c, &e); //2 registros
  17.       printf("%d %s %s %.2f\n", a, b, c, e);  //que tiene el archivo
  18.      
  19.     }
El problema aquí es que el segundo registro no lo lee, y pues supuse que al momento de hacer la primera lectura, el apuntador de posición se desplazaria a la siguiente posición para almacenar el siguiente registro.
Pero por lo menos pienso yo que debería de sobreescribir entonces al primer registro.
Mi pregunta es esa, ya he hallado la forma de guardar los 2 registros, pero en el programa anterior nose que pasa con el segundo registro, ¿porque no se ejecuta y reemplaza al registro anterior?
Gracias...