Código:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> void grabarArch(int *resultado, char nombrneArch[]); void mostrarArch(int *resul, char nombreArch[]); void eliminarValorL(int *encontro, int valor, int *result, char nombreArch[]); int main(){ int valenc = 1, valor = 0, resul = 0; int valorBorrar = 0; char nombre[] = "ejercicio1.dat"; grabarArch(&resul, nombre); puts("Valores:"); mostrarArch(&resul, nombre); printf("Ingrese un valor a elimiar del archivo antes creado: "); scanf("%d", &valor); eliminarValorL(&valenc, valor, &resul, nombre); if(valenc == 0){ puts("Se borraron los elementos. El nuevo archivo es: \n"); mostrarArch(&resul, nombre); if (resul == 1){ puts("No se pudo leer el archivo"); }//if (resul == 1) }else{ puts("El valor ingresado no se encuentra en el archivo"); }//if(valenc == 0) return resul; } void grabarArch( int *resul, char nombreArch[]){ int valor, i = 0; FILE *arch; arch = fopen(nombreArch,"wb"); if(arch != NULL){ printf("Ingrese un entero (-1 para finalizar): "); scanf("%d", &valor); while (valor != -1){ fwrite(&valor, sizeof(valor), 1, arch); printf("Ingrese un entero (-1 para finalizar): "); scanf("%d", &valor); }//while (valor != -1) fclose(arch); }else{ *resul = 1; }//if (arch != NULL) } void mostrarArch(int *resul, char nombreArch[]){ int i = 0; int entero = 0; FILE *arch; arch = fopen(nombreArch,"rb"); if (arch != NULL){ fread(&entero, sizeof(entero),1, arch); while(!feof(arch)){ if (entero >0){ printf("%d\n", entero); fread(&entero, sizeof(entero),1, arch); } }//while(!feof(arch)) fclose(arch); }else{ *resul = 1; }//if (arch != NULL) } void eliminarValorL(int *encontrado, int valor, int *result, char nombreArch[]){ int entero; int datoAct; FILE *arch; arch = fopen(nombreArch, "rb+"); if( arch == NULL){ *result = 1; }else{ fread(&entero, sizeof(entero), 1, arch); while(!feof(arch)){ if(entero>0 && entero == valor){ fseek(arch,-1*(int)sizeof(entero),SEEK_CUR); entero *= -1; fwrite(&entero, sizeof(entero), 1, arch); fseek(arch,0,SEEK_CUR); *encontrado = 0; }//if(entero>0 && entero == valor) fread(&entero, sizeof(entero), 1, arch); }//while(!feof(arch)) fclose(arch); }//if( arch != NULL) }//void eliminarValorL