Mu buenas... Tengo un programa para comparar dos ficheros, uno de pedidos y otro de lo que hay disponible en el almacén, pero no funciona.
Me parece que sólo está haciendo correr uno de los ficheros, pero no sé cómo solucionarlo. ¿Alguien tiene una sugerencia?
#include<stdio.h>
#include<conio.h>
#include<values.h>
#include<stdlib.h>
#include<ctype.h>
void proceso(void);
void leer_almacen(void);
void leer_pedidos(void);
void encontrado(void);
void error(void);
FILE *alma, *ped;
struct
{
long cod_ar;
char deno[30];
float pv;
short exis;
}reg_alma;
struct
{
long cod_ar;
short uni;
long cod_cli;
}reg_ped;
short er;
void main(void)
{
alma=fopen("c:\\almacen.dat", "r");
if (alma!=NULL)
{
ped=fopen ("c:\\pedidos.dat","r");
if (ped!=NULL)
{
proceso();
fcloseall();
}
else
{
clrscr();
printf("\n\tError de apertura en pedidos");
printf("\n\tEste programa se cancelara");
printf("\n\tPulse cualquier tecla para terminar");
fflush(stdin);
getch();
fclose (alma);
}
}
else
{
clrscr();
printf("\n\tError de apertura en almacen");
printf("\n\tEste programa se cancelara");
printf("\n\tPulse cualquier tecla para terminar");
fflush(stdin);
getch();
}
clrscr();
}
//EN ESTA FUNCION PIENSO QUE ESTA EL PROBLEMA:
void proceso(void)
{
leer_almacen();
leer_pedidos();
while (feof(ped)==0)
{
if (reg_ped.cod_ar>reg_alma.cod_ar)
{
leer_almacen();
if (feof(alma)!=0)
reg_alma.cod_ar=MAXLONG;
}
else
{
if (reg_ped.cod_ar==reg_alma.cod_ar)
encontrado();
else
error();
leer_pedidos();
}
}
}
void leer_almacen(void)
{
er=fread(®_alma, sizeof(reg_alma), 1, alma);
if(er!=1&&feof(alma)==0)
{
clrscr();
printf("\n\tError de lectura en almacen");
printf("\n\tPrograma cancelado");
printf("\n\tPulse cualquier tecla para salir");
fflush(stdin);
getch();
clrscr();
exit(1);
}
}
void leer_pedidos(void)
{
er=fread(®_ped, sizeof(reg_ped), 1, ped);
if (er!=1&&feof(ped)==0)
{
clrscr();
printf("\n\tError de lectura en pedidos");
printf("\n\tPrograma cancelado");
printf("\n\tPulse cualquier tecla para salir");
fflush(stdin);
getch();
clrscr();
exit(1);
}
}
void encontrado(void)
{
clrscr();
gotoxy (26,3);
printf("Proceso de atencion de pedidos");
if (reg_ped.uni>reg_alma.exis)
printf("Pedido no atendido - articulo: %ld, unidades: %ld, existencias: %d, cliente %ld", reg_alma.cod_ar, reg_ped.uni, reg_alma.exis, reg_ped.cod_cli);
else
printf("Pedido atendido - articulo: %ld, unidades: %ld, cliente %ld", reg_ped.cod_ar, reg_ped.uni, reg_ped.cod_cli);
fflush(stdin);
getch();
}
void error(void)
{
clrscr();
gotoxy (26,3);
printf("Proceso de atencion de pedidos");
printf("\n\n\tCodigo de articulo %ld no existe en almacen", reg_ped.cod_ar);
printf("\n\n\tPulse cualquier tecla para salir");
fflush(stdin);
getch();
exit(1);
}