/* Este es un programa incompleto que debes completar para */ /* que realice lo siguiente: */ /* 1. Abrir el fichero en modo solo lectura */ /* 2. Buscar todos los registros cuyo campo "producto" */ /* coincida con un valor dado */ /* 3. Cerrar el fichero */ /* */ /* Funciones que se han de emplear: */ /* 1. Manejo de ficheros a bajo nivel */ /* 2. Manejo dinamico de memoria */ /* 3. Operaciones de bloques de memoria */ /* Debes incluir los ficheros cabecera necesarios */ #define DIM_PROD 20 #define SALIR "S" /* codigo 83 */ #define ERROR -1 struct registro { int codigo; char producto[DIM_PROD]; float precio; }; char nombre[50]; char buffer[DIM_PROD]; main() { /* Bloque de declaracion de variables, tendras que */ /* declarar las variables que utilices y que no esten */ /* declaradas */ struct registro *p; printf("\n Nombre del fichero: ") ; scanf("%s",nombre) ; /* Debes abrir el fichero cuyo pathname esta en nombre */ ... ; /* Debes pedir memoria para almacenar una variable de */ /* "struct registro", la direccion deberas almacenarla */ /* en p, debes ademas comprobar si la peticion se */ /* se cumplio */ /* Bucle principal */ do { printf("\n Introduce un caracter ("S" finaliza): "); scanf("%c",&caracter); if ( caracter == SALIR ) break; /* Usando la funcion "memset" debes inicializar */ /* todos los bytes de buffer al valor de caracter */ ... ; /* Debes posicionar el puntero de acceso */ /* al fichero a la posicion 0 */ ...; /* Bucle de lecturas y comparaciones */ do { /* Debes leer un registro */ ...; /* Debes comprobar el final del fichero */ /* si se llego, entonces salir del bucle de */ /* lecturas. Si no se ha llegado (se leyo un */ /* un registro), entonces comprobar si el campo */ /* "producto" es el buscado; en ese caso */ /* visualizar el registro */ ...; } ( 1 ); } while( 1 ); /* Debes cerrar el fichero */ ...; /* Debes liberar el bloque de memoria que obtuviste antes */ ... ; }