en mi funcion eleminar tengo una validacion como esta
if(inventario.cod == elim){
cual hize para borrar solo un elemento pero el problema que cuando intento borrar un elemento me borra todo los elementos del archivo y el de reporte no me muestra nada. no se que estoy haciendo mal
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
FILE *file;
FILE *tmp;
struct inven{
int cod;
char descrip[30];
int exist;
int exist_min;
int exist_max;
float precio;
int cod_provedor;
}inventario;
void crear();
void modificar();
void eliminar();
void reporte();
void menu();
void menu(){
int resp;
do{
printf("\n\t\t---------------------------------------------------"); printf("\n\t\t\t S T O R E L T E "); printf("\n\t\t-------------------------------------------------\n\n\n\n"); printf("\t\t\t\t [1] agregar producto \n"); printf("\t\t\t\t [2] modificar un producto \n"); printf("\t\t\t\t [3] eliminar \n"); printf("\t\t\t\t [4] reporte \n"); printf("\t\t\t\t [5] salir ........ "); printf("\n\n\t\t\t\tSelecciona: "); switch(resp){
case '1': crear();
break;
case '2': modificar();
break;
case '3': eliminar();
break;
case '4': reporte();
break;
default:
}
}
while(resp!=6);
}
int main(){
menu();
return 0;
}
void crear(){
int codigo = inventario.cod;
char opcion = 's';
if ((file
=fopen("inventario.txt","a+"))==NULL
) printf("\n\n\n\n\t\t< < < Error de apertura de archivo inventario.dat > > >"); else{
while(opcion == 's'){
printf("\n\n CODIGO: \t%d",codigo
++); scanf("%s",&inventario.
descrip); printf("\n\n EXISTENCIA DEL PRODUCTO:\t "); scanf("%s", &inventario.
exist); printf("\n\n PRECIO UNITARIO DEL PRODUCTO:\t "); scanf("%s",&inventario.
precio); fwrite(&inventario
, sizeof(inventario
), 1, file
); printf("\n\n\n\t\t DESEAS CAPTURAR OTRO PRODUCTO [s/n] : "); }
}
}
void modificar(){
int opc,i=0;
char elim[6];
printf("\nINGRESE EL CODIGO DEL PRODUCTO A MODIFICAR: "); file
= fopen("inventario.dat","r+b");
if(!file)
printf("\n Error de apertura del archivo inventario.dat\n"); else{
while (((fread(&inventario
, sizeof(inventario
), 1, file
))!=0)&&i
!=1){ //if(!strcmp(inventario.cod,elim)){
if(inventario.cod!=elim){
printf("DESCRIPCION : %s\n",inventario.
descrip); printf("EXISTENCIA : %s\n",inventario.
exist); printf("PRECIO UNITARIO :$ %s\n",inventario.
precio);
printf ("\nQUE DESEA MODIFICAR: "); printf ("\n\t\t\t1.-DESCRIPCION\n"); printf("\t\t\t2.-EXISTENCIA\n"); printf ("\t\t\t3.-PRECIO UNITARIO\n"); printf("\t\t\tDIGITA TU OPCION :"); switch (opc!=4){
case 1:
printf ("\nINGRESA LA NUEVA DESCRIPCION: "); scanf("%s",&inventario.
descrip); break;
case 2:
printf ("\nINGRESA LA NUEVA EXISTENCIA "); scanf("%s",&inventario.
exist); break;
case 3:
printf ("\nINGRESA EL NUEVO PRECIO UNITARIO "); scanf("%s",&inventario.
precio); break;
}
fseek(file
,sizeof(inventario
),SEEK_CUR
); fwrite(&inventario
,sizeof(inventario
), 1, file
); i=1;
}
}
}
}
void eliminar(){
char elim[10];
printf("\nINGRESE EL CODIGO DEL PRODUCTO PARA ELIMINAR: "); file
=fopen("inventario.dat","r+b"); tmp
=fopen("inventario1.dat","wb"); if(!file)
printf("\n Error de apuertura del archivo inventario.dat\n"); else{
while(((fread(&inventario
, sizeof(inventario
), 1, file
))!=0)){ if(inventario.cod == elim){
//fseek(tmp,sizeof(inventario),SEEK_END);
//fseek(tmp,sizeof(inventario),SEEK_CUR);
fwrite(&inventario
,sizeof(inventario
), 1, tmp
); tmp
=fopen("inventario1.dat","r+b"); printf ("\n\n\n\n\n\n\n\n\n\n\n EL PRODUCTO SE HA ELIMINADO CORRECTAMENTE \n"); printf ("\n OPRIMA CUALQUIER TECLA PARA CONTINUAR"); }
}
system("ren inventario1.dat inventario.dat"); }
}
void reporte (){
int i;
FILE *invent;
invent
= fopen("inventario.dat", "r"); if(invent == NULL)
{
printf("\nNo existe archivo"); }
fread(&inventario
, sizeof(struct inven
), 20, invent
); printf("------------------------------------------------------------------\n"); printf("CODIGO DESCRIPCION\t\tEXISTENCIA\tPRECIO UNITARIO \n"); printf("------------------------------------------------------------------\n"); printf(" %s %s\t\t %s\t\t %s \n",inventario.
cod,inventario.
descrip,inventario.
exist,inventario.
precio); fread(&inventario
, sizeof(struct inven
), 20, invent
); }
}