Ver Mensaje Individual
  #9  
Antiguo 25-11-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 14
aguml Va por buen camino
Creo que te complicas mucho la vida, yo usaria archivos con registros de tamaño fijo.
En este ejemplo puedes ver como crear un archivo secuencial y lo relleno y luego busco en el tanto por nombre como por numero de registro. Es mucho mas sencillo de manejar.

Código PHP:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TAM_MAX_PALABRA 50
int main(int argccharargv[])
{
   
struct{
      
char palabra[TAM_MAX_PALABRA];
      
int index;
   }
registro;

   
char nombre[TAM_MAX_PALABRA];
   
int cantidadxindiceencontradanreadsalir=0;
   
char caracter;
   
FILE *archivo;

   
//ZONA DONDE CREO EL ARCHIVO SECUENCIAL Y LO RELLENO CON LOS REGISTROS
   
printf("\nIndique el numero de palabras a usar: ");
   
scanf("%d",&cantidad);

   
archivo fopen("prueba.txt","w"); //Abro el fichero para escritura

   
if(archivo != NULL){ //Si el archivo se ha abierto correctamente...
      
for(0cantidadx++){
         
printf("\n\nIntroduce el nombre del registro %d: "x);
         
fflush(stdin); //Limpiamos el buffer de entrada
         
fgets(registro.palabra,TAM_MAX_PALABRA,stdin); //es mas recomendable ya que permite guardar cadenas con espacios
         
printf("\nIntroduce el numero del registro %d: "x);
         
scanf("%d",&registro.index);

         
fwrite(&registro,sizeof(registro),1,archivo); //Guardo el registro
      
}
      
fclose(archivo); //Cierro el archivo
   
}

   
//ZONA DONDE BUSCO EL REGISTRO DESEADO
   
archivofopen("prueba.txt","r");

   if (
archivo== NULL){
      
printf("\nEl archivo no se encuentra.\n");
   }else{
      do{
         
//Mostramos el menú y esperamos hasta que se elija una opcion correcta
         
system("CLS"); //Limpiamos la pantalla
         
printf("\n\nELIGE EL TIPO DE BUSQUEDA\n");
         
printf("-------------------------\n\n");
         
printf("\t1.Por indice\n");
         
printf("\t2.Por nombre\n");
         
printf("\t3.Salir\n\n");
         
printf("\tOpcion: ");
         
scanf("%d",&x);

         switch(
x)
         {
            case 
1:
               
printf("\nElige el indice a buscar: ");
               
scanf("%d",&indice);
               break;

            case 
2:
               
printf("\nElige el nombre a buscar: ");
               
fflush(stdin); //Limpiamos el buffer de entrada
               
fgets(nombre,TAM_MAX_PALABRA,stdin); //es mas recomendable ya que permite guardar cadenas con espacios
               
break;

            case 
3:
               
salir 1;
               break;

            default:
               
printf("\n\tValor introducido incorrecto.");
               
printf("\n\tPulse Intro para continuar.");
               
fflush(stdin); //Limpiamos el buffer de entrada
               
getchar(); //Esperamos a que se pulse intro
         
}
      }while(
|| 3); //Si elegimos una opcion correcta saldremos del bucle

      
if(salir == 0){
         
encontrada 0;

         while (!
feof(archivo)){
            
nread fread(&registro,sizeof(registro),1,archivo);

            if(
nread == 0//Si no lee mas registros es porque llegamos al final
               
break;

            switch(
x)
            {
               case 
1:
                  if(
indice == registro.index){
                     
printf("\nPalabra encontrada: %s"registro.palabra);
                     
encontrada 1;
                  }
                  break;

               case 
2:
                  if(
strcmp(nombreregistro.palabra) == 0){
                     
printf("\nPalabra encontrada. Registro: %d"registro.index);
                     
encontrada 1;
                  }
                  break;
            }
         }

         if(
encontrada == 0)
            
printf("\nPalabra no encontrada.");

         
fclose(archivo); //Cerramos el archivo
         
printf("\n\n");
         
system("PAUSE");
      }
   }
   return 
0;
}
//--------------------------------------------------------------------------- 
Responder Con Cita