elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problemas al borrar un elemento en el archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problemas al borrar un elemento en el archivo  (Leído 3,322 veces)
geshiro

Desconectado Desconectado

Mensajes: 178


Ver Perfil
problemas al borrar un elemento en el archivo
« en: 26 Junio 2016, 19:56 pm »

en mi funcion eleminar  tengo una validacion como esta
Código
  1. 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

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. FILE *file;
  6. FILE *tmp;
  7. struct inven{
  8.  int cod;
  9.  char descrip[30];
  10.  int exist;
  11.  int exist_min;
  12.  int exist_max;
  13.  float precio;
  14.  int cod_provedor;
  15. }inventario;
  16.  
  17. void crear();
  18. void modificar();
  19. void eliminar();
  20. void reporte();
  21. void menu();
  22.  
  23. void menu(){
  24. int resp;
  25.  do{
  26.  
  27.    printf("\n\t\t---------------------------------------------------");
  28.    printf("\n\t\t\t      S T O R E L T E     ");
  29.    printf("\n\t\t-------------------------------------------------\n\n\n\n");
  30.    printf("\t\t\t\t [1] agregar producto  \n");
  31.    printf("\t\t\t\t [2] modificar un producto     \n");
  32.    printf("\t\t\t\t [3] eliminar             \n");
  33.    printf("\t\t\t\t [4] reporte              \n");
  34.    printf("\t\t\t\t [5] salir  ........        ");
  35.    printf("\n\n\t\t\t\tSelecciona: ");
  36.    resp=getchar();
  37.    switch(resp){
  38.      case '1': crear();
  39.             break;
  40.  
  41.    case '2': modificar();
  42.             break;
  43.  
  44.      case '3': eliminar();
  45.            break;
  46.  
  47.      case '4': reporte();
  48.            break;
  49.  
  50.      case '5' : exit(1);
  51.  
  52.      default:
  53.         printf("opcion no validaa");
  54.    }
  55.  }
  56.  while(resp!=6);
  57.  getch();
  58. }
  59.  
  60. int main(){
  61.    menu();
  62.    return 0;
  63. }
  64.  
  65. void crear(){
  66.   system("cls");
  67.   int codigo = inventario.cod;
  68.   char opcion = 's';
  69.   if ((file=fopen("inventario.txt","a+"))==NULL)
  70.      printf("\n\n\n\n\t\t< < < Error de apertura de archivo inventario.dat   > > >");
  71.   else{
  72.     while(opcion == 's'){
  73.        printf("\n\n CODIGO: \t%d",codigo++);
  74.        printf("\n\n PRODUCTO:\t ");
  75.        scanf("%s",&inventario.descrip);
  76.        printf("\n\n EXISTENCIA DEL PRODUCTO:\t ");
  77.        scanf("%s", &inventario.exist);
  78.        printf("\n\n PRECIO UNITARIO DEL PRODUCTO:\t ");
  79.        scanf("%s",&inventario.precio);
  80.        fwrite(&inventario, sizeof(inventario), 1, file);
  81.        printf("\n\n\n\t\t DESEAS CAPTURAR OTRO PRODUCTO [s/n] : ");
  82.          opcion = getchar();
  83.        getch();
  84.        }
  85.    }
  86.    fclose(file);
  87. }
  88.  
  89. void modificar(){
  90.      system("cls");
  91.      int opc,i=0;
  92.      char elim[6];
  93.      printf("\nINGRESE EL CODIGO DEL PRODUCTO A MODIFICAR: ");
  94.      scanf("%s",&elim);
  95.      file = fopen("inventario.dat","r+b");    
  96.  
  97.        if(!file)
  98.         printf("\n Error de apertura del archivo inventario.dat\n");  
  99.      else{
  100.         while (((fread(&inventario, sizeof(inventario), 1, file))!=0)&&i!=1){
  101.            //if(!strcmp(inventario.cod,elim)){        
  102.            if(inventario.cod!=elim){
  103.                printf("DESCRIPCION        : %s\n",inventario.descrip);
  104.                printf("EXISTENCIA     : %s\n",inventario.exist);
  105.                printf("PRECIO UNITARIO     :$ %s\n",inventario.precio);
  106.  
  107.               printf ("\nQUE DESEA MODIFICAR: ");
  108.               printf ("\n\t\t\t1.-DESCRIPCION\n");
  109.               printf("\t\t\t2.-EXISTENCIA\n");
  110.               printf ("\t\t\t3.-PRECIO UNITARIO\n");
  111.               printf("\t\t\t4.-SALIR\n");
  112.               printf("\t\t\tDIGITA TU OPCION :");
  113.               scanf("%d",&opc);
  114.               switch (opc!=4){
  115.                case 1:
  116.                  printf ("\nINGRESA LA NUEVA DESCRIPCION: ");
  117.                  scanf("%s",&inventario.descrip);
  118.                  break;
  119.                case 2:
  120.                  printf ("\nINGRESA LA NUEVA EXISTENCIA ");
  121.                  scanf("%s",&inventario.exist);
  122.                  break;
  123.                case 3:
  124.                  printf ("\nINGRESA EL NUEVO PRECIO UNITARIO ");
  125.                  scanf("%s",&inventario.precio);
  126.                  break;
  127.               }
  128.             fseek(file,sizeof(inventario),SEEK_CUR);
  129.             fwrite(&inventario,sizeof(inventario), 1, file);
  130.             i=1;
  131.             fclose(file);
  132.            }
  133.         }
  134.  
  135.      }
  136. }
  137.  
  138. void eliminar(){
  139.    system("cls");
  140.    char elim[10];
  141.    printf("\nINGRESE EL CODIGO DEL PRODUCTO PARA ELIMINAR: ");
  142.    scanf("%s",&elim);
  143.    file=fopen("inventario.dat","r+b");
  144.    tmp=fopen("inventario1.dat","wb");
  145.    if(!file)
  146.        printf("\n Error de apuertura del archivo inventario.dat\n");
  147.    else{
  148.        while(((fread(&inventario, sizeof(inventario), 1, file))!=0)){
  149.            if(inventario.cod == elim){
  150.                //fseek(tmp,sizeof(inventario),SEEK_END);
  151.                //fseek(tmp,sizeof(inventario),SEEK_CUR);
  152.                fwrite(&inventario,sizeof(inventario), 1, tmp);
  153.                fclose(tmp);
  154.                tmp=fopen("inventario1.dat","r+b");
  155.                printf ("\n\n\n\n\n\n\n\n\n\n\n                   EL PRODUCTO SE HA ELIMINADO CORRECTAMENTE \n");
  156.                printf ("\n                          OPRIMA CUALQUIER TECLA PARA CONTINUAR");
  157.                getch();
  158.            }
  159.        }
  160.        fclose(file);
  161.        fclose(tmp);
  162.        system("del inventario.dat");
  163.        system("ren inventario1.dat inventario.dat");
  164.        }
  165.    }
  166.  
  167. void reporte (){
  168. system("cls");
  169. int i;
  170. FILE *invent;  
  171. invent = fopen("inventario.dat", "r");  
  172. if(invent == NULL)
  173.     {
  174.        printf("\nNo existe archivo");  
  175.     }
  176.       fread(&inventario, sizeof(struct inven), 20, invent);
  177.                             printf("------------------------------------------------------------------\n");
  178.                            printf("CODIGO   DESCRIPCION\t\tEXISTENCIA\tPRECIO UNITARIO  \n");
  179.                       printf("------------------------------------------------------------------\n");
  180. while(!feof(invent)){
  181.      printf("  %s      %s\t\t   %s\t\t      %s \n",inventario.cod,inventario.descrip,inventario.exist,inventario.precio);
  182.       fread(&inventario, sizeof(struct inven), 20, invent);
  183.       }
  184.     fclose(invent);
  185.    getch();
  186. }
  187.  


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: problemas al borrar un elemento en el archivo
« Respuesta #1 en: 26 Junio 2016, 20:24 pm »

No puedes usar esa compracion tu variable elim es cadena y tu variable .cod es entero no puedes comparar de esa forma. Tienes que pasar esa cadena a  entero con atoi.

De hi en mas no he visto todo el demas codigo.

Saludos


En línea

geshiro

Desconectado Desconectado

Mensajes: 178


Ver Perfil
Re: problemas al borrar un elemento en el archivo
« Respuesta #2 en: 27 Junio 2016, 06:18 am »

y si cambio la variable elim por int ahora si se podria?
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: problemas al borrar un elemento en el archivo
« Respuesta #3 en: 27 Junio 2016, 06:28 am »

si es int si podrias hacer la comparacion correctamente.

Tendrias que cambiar el formato del scanf por

Código
  1. scanf("%d",&elim);
  o en su defecto usar atoi sobre la cadena que ya capturaste.

Saludos
En línea

geshiro

Desconectado Desconectado

Mensajes: 178


Ver Perfil
Re: problemas al borrar un elemento en el archivo
« Respuesta #4 en: 27 Junio 2016, 06:39 am »

pero ni hace igual me borra todo
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: problemas al borrar un elemento en el archivo
« Respuesta #5 en: 27 Junio 2016, 14:52 pm »

Hola no se de donde copiaste tu codigo pero al parecer no sabes lo que hace exactamente.

La linea del if esta mal, deberia de quedar mas o menos asi:

Código
  1.        while(((fread(&inventario, sizeof(inventario), 1, file))!=0)){
  2.            if(inventario.cod != elim){
  3.                fwrite(&inventario,sizeof(inventario), 1, tmp);
  4.            }
  5.        }
  6. fclose(tmp);
  7. printf ("\n\n\n\n\n\n\n\n\n\n\n                   EL PRODUCTO SE HA ELIMINADO CORRECTAMENTE \n");
  8.                printf ("\n                          OPRIMA CUALQUIER TECLA PARA CONTINUAR");
  9.                getch();
  10.  


Asi mientras queden registros en el archivo original y mientras no sea igual al registro a eliminar se guardaran los registros leidos en el archivo temporal ya solo te quedara pasar el archivo temportal al archivo original. o solo seria cuestio  de renombrarlo

Saludos



Edito

Te dejo unos videos que he hecho sobre el tema.






« Última modificación: 27 Junio 2016, 16:42 pm por AlbertoBSD » En línea

geshiro

Desconectado Desconectado

Mensajes: 178


Ver Perfil
Re: problemas al borrar un elemento en el archivo
« Respuesta #6 en: 30 Junio 2016, 00:00 am »

por ejemplo el de reporte porque no me funciona la funcion si esta haciendo el ciclo bien
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: problemas al borrar un elemento en el archivo
« Respuesta #7 en: 30 Junio 2016, 01:25 am »

Citar
Asi mientras queden registros en el archivo original y mientras no sea igual al registro a eliminar se guardaran los registros leidos en el archivo temporal ya solo te quedara pasar el archivo temportal al archivo original. o solo seria cuestio  de renombrarlo

Si te diste cuenta que ahora tienes 2 Archivos.
Hay que cambiarles el nombre.

Saludos
En línea

geshiro

Desconectado Desconectado

Mensajes: 178


Ver Perfil
Re: problemas al borrar un elemento en el archivo
« Respuesta #8 en: 30 Junio 2016, 02:24 am »

si pero inventario.dat deberia ya mostrarme los datos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problemas para borrar un archivo « 1 2 »
Programación Visual Basic
Anteros 19 4,837 Último mensaje 2 Enero 2007, 20:16 pm
por Sancho.Mazorka
Duda sobre como borrar un elemento d un arreglo
Programación C/C++
carmelina 3 2,550 Último mensaje 26 Abril 2012, 00:28 am
por carmelina
Ayuda borrar solo una extension jpg sin borrar nigun otro archivo
Programación Visual Basic
Otaku=) 4 3,102 Último mensaje 3 Julio 2012, 03:28 am
por Otaku=)
borrar elemento de la lista enlazada simple
Programación C/C++
d91 2 3,273 Último mensaje 9 Junio 2014, 13:44 pm
por d91
Funcion borrar elemento de una lista STRUCT
Programación C/C++
galapok11 3 2,146 Último mensaje 17 Agosto 2016, 17:24 pm
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines