Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: [ ] en 19 Junio 2014, 03:12 am



Título: Ayuda
Publicado por: [ ] en 19 Junio 2014, 03:12 am
Estoy desarrollando un programa que facture, estoy utilizando archivo y estructuras.

El asunto esta en que cuando trato de mostrar el inventario, la sección precio me muestra basura y no le consigo la vuelta

lo único que hace es guardar y mostrar los productos lo demás lo tengo aparte

código:
Código
  1. #include <stdio.h>
  2.  
  3.  
  4. typedef struct biblioteca{
  5.        int cod;
  6.  
  7.  
  8.        char nombre[10];
  9.       char editorial[15];
  10.       int precio;
  11.  
  12.        }libros;
  13.  
  14. libros crear(int i){
  15.         libros x;
  16.         x.cod=i;
  17.  
  18.  
  19.         printf("\nNombre del libro: ");
  20.         scanf("%s",&x.nombre);
  21.  
  22.  
  23.         printf("\nEditorial del libro: ");
  24.         scanf("%s",&x.editorial);
  25.  
  26.         printf("\nPrecio del libro: ");
  27.         scanf("%d",&x.precio);
  28.  
  29.         return x;
  30.         }
  31.  
  32. void guardar(FILE *p,libros x){
  33.  
  34. if(p=(fopen("Productos.txt","a+"))){
  35. fprintf(p,"%d %s %s %d\n",x.cod,x.nombre,x.editorial,x.precio);
  36. printf("\n PRODUCTOS GUARDADOS CORRECTAMENTE \n");
  37. fclose(p);
  38.  
  39.  
  40. }
  41. else printf("\n\n Error :( Algo salio mal! \n");
  42. }
  43.  
  44. void inventario(FILE *p){
  45.  
  46. libros aux;
  47. p=fopen("Productos.txt","r");
  48. if(p!=NULL){
  49.                printf("LISTA TOTAL DE LIBROS: \n\n");
  50. printf("%5s%15s%15s%10s\n\n","CODIGO","LIBRO", "EDITORIAL","CANTIDAD");
  51. while(feof(p)==0){
  52. fscanf(p,"%d %s %s %d\n",&aux.cod,aux.nombre,aux.editorial,aux.precio);
  53.  
  54. printf("%5d%15s%15s%10d\n",aux.cod,aux.nombre,aux.editorial,aux.precio);
  55. }
  56. fclose(p);
  57. }
  58. else printf("\n\nError :( Algo salio mal! NO HAY REGISTROS\n");
  59.  
  60.  
  61. }
  62.  
  63.  
  64. int main(){
  65. int ac,i=0;
  66.  
  67. FILE *p;
  68.    int opc;
  69.  
  70. do{
  71.       printf("\n\n\t..::BIENBENIDO AL SISTEMA::..\n\n");
  72.       printf("\n\n\t\t1.-Vender\n\t\t2.-Registrar cliente\n\t\t3.-Mostrar inventario\n\t\t4.-Agregar libro\n\t\t0.-Salir\n\n\n");
  73.       scanf("%d",&opc);
  74.       system("cls");
  75.       if(opc==3){        
  76.                   inventario(p);
  77.  
  78.   }
  79.       if(opc==4){
  80.                   i++;
  81.   guardar(p,crear(i));
  82.                   }
  83. }while(opc!=0);
  84.  
  85. }
  86.  

gracias de antemano!   :)


Título: Re: Ayuda
Publicado por: Eternal Idol en 19 Junio 2014, 10:32 am
Fijate que hay una diferencia clave entre cuando llamas a scanf y fscanf, en una estas pasandole la direccion de precio y en otra su valor.

PD. El uso de p en main no tiene utilidad ni sentido tal y como esta (actua como variable local en las funciones guardar e inventario).