Ayuda

Iniciado por [ ], 19 Junio 2014, 03:12 AM

0 Miembros y 1 Visitante están viendo este tema.

[ ]

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 (cpp) [Seleccionar]

#include <stdio.h>


typedef struct biblioteca{
       int cod;
     
       
       char nombre[10];
      char editorial[15];
      int precio;
     
       }libros;

libros crear(int i){
        libros x;
        x.cod=i;
     
       
        printf("\nNombre del libro: ");
        scanf("%s",&x.nombre);

       
        printf("\nEditorial del libro: ");
        scanf("%s",&x.editorial);
       
        printf("\nPrecio del libro: ");
        scanf("%d",&x.precio);
       
        return x;
        }

void guardar(FILE *p,libros x){

if(p=(fopen("Productos.txt","a+"))){
fprintf(p,"%d %s %s %d\n",x.cod,x.nombre,x.editorial,x.precio);
printf("\n PRODUCTOS GUARDADOS CORRECTAMENTE \n");
fclose(p);


}
else printf("\n\n Error :( Algo salio mal! \n");
}

void inventario(FILE *p){

libros aux;
p=fopen("Productos.txt","r");
if(p!=NULL){
               printf("LISTA TOTAL DE LIBROS: \n\n");
printf("%5s%15s%15s%10s\n\n","CODIGO","LIBRO", "EDITORIAL","CANTIDAD");
while(feof(p)==0){
fscanf(p,"%d %s %s %d\n",&aux.cod,aux.nombre,aux.editorial,aux.precio);

printf("%5d%15s%15s%10d\n",aux.cod,aux.nombre,aux.editorial,aux.precio);
}
fclose(p);
}
else printf("\n\nError :( Algo salio mal! NO HAY REGISTROS\n");


}


int main(){
int ac,i=0;

FILE *p;
   int opc;

do{
      printf("\n\n\t..::BIENBENIDO AL SISTEMA::..\n\n");
      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");
      scanf("%d",&opc);
      system("cls");
      if(opc==3){        
                  inventario(p);
               
  }
      if(opc==4){
                  i++;
  guardar(p,crear(i));
                  }
}while(opc!=0);

}


gracias de antemano!   :)

Eternal Idol

#1
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).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón