[ Foro de C ]

Ayuda con el uso de fseek

01-Dec-2012 09:09
Juan Velez
1 Respuestas

Yo tengo un problema hic este programa me piden que use las funciones fread, fwrite y fseek pero no se como incluirle la funcion fseek podrian explicarme como hacerlo.

#include <stdio.h>

void menu();
void CrearArchivo(ARCHI *Archivo);
void InsertarDatos(ARCHI *Archivo);
void VerDatos(ARCHI *Archivo);

struct sRegistro {
  char Nombre[25];
  char Rfc[15];
  char Direccion;
  int Telefono;
  float Salario;
} registro;

int main()
{
       int opcion;
       int exit = 0;
       ARCHI *archivo;

       while (!exit)
       {      
       menu();
       printf("\nOpcion: ");
       scanf("%d", &opcion);

       switch(opcion)
       {
       case 1:
       CrearArchivo(archivo);
       break;
       case 2:
       InsertarDatos(archivo);
       break;
       case 3:
       VerDatos(archivo);
       break;
       case 4:
       exit = 1;
       break;
       default:
       printf("\nopcion no valida");
       }
       }

       return 0;
}

void menu()
{
       printf("\nMenu:");
       printf("\n\t1. Crear Archivo");
       printf("\n\t2. Insertar datos");
       printf("\n\t3. Ver datos");
       printf("\n\t4. Salir");
}

void CrearArchivo(ARCHI *Archivo)
{
       Archivo = fopen("archivo", "r");

       if(!Archivo)
       {
       Archivo = fopen("archivo", "w");
       printf("\nArchivo creado!");
       }
       else
       {
       printf("\nEl archivo ya existe!");
       }

       fclose (Archivo);

       return;
}

void InsertarDatos(ARCHI *Archivo)
{
       Archivo = fopen("archivo", "a+");

       if(Archivo == NULL)
       {
       printf("\nArchivo no existe! \nPor favor creelo");
       return;
       }

       printf("\nEscriba el nombre: ");
       scanf("%s", &registro.Nombre);

       printf("\nEscriba el RFC: ");
       scanf("%s", &registro.Rfc);

       printf("\nEscriba la direccion: ");
       scanf("%s", &registro.Direccion);

       printf("\nEscriba el telefono: ");
       scanf("%d", &registro.Telefono);

       printf("\nEscriba el salario: ");
       scanf("%f", &registro.Salario);

       fwrite(&registro, sizeof(struct sRegistro), 1, Archivo);

       fclose(Archivo);

       return;
}

void VerDatos(ARCHI *Archivo)
{
       int numero = 1;

       Archivo = fopen("archivo", "r");

       if(Archivo == NULL)
       {
       printf("\nArchivo no existe! \nPor favor creelo");
       return;
       }

       fread(&registro, sizeof(struct sRegistro), 1, Archivo);

       printf("\nNumero \tNombre \tRfc \tDireccion \tTelefono \tSalario");

       while(!feof(Archivo))
       {
       printf("\n%d \t%s \t%s \t%s \t%d \t%.2f", numero, registro.Nombre,
       registro.Rfc, registro.Direccion, registro.Telefono, registro.Salario);
       fread(&registro, sizeof(struct sRegistro), 1, Archivo);
       numero++;
       }

       fclose(Archivo);

       return;
}


01-Dec-2012 10:24
Nacho Cabanes (+31)

Puedes añadirle una opción de "Buscar", que recorra una por una todas las fichas añadidas, situándose antes con "fseek".

O bien una opción de "Mostrar en orden inverso", que NECESITA el fseek (porque la opción anterior se puede hacer con fseek, pero, siendo estrictos, no lo necesita).






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)