levapantozsalva
Bovino maduro
- Desde
- 28 Ago 2010
- Mensajes
- 190
- Tema Autor
- #1
Hola bakunos, se me ha presentado un problema con un método de ordenación (selección) dentro de c++,
el problema se encuentraen negritas y cursiva, el problema consiste en que no me lee los datos de la estructura, me lee números aleatorios. Seria de mucha ayuda que me auxilien en resolverlo.
A continuación se presenta el código
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define MAX_VENTAS 5
typedef struct datos{
int folio, id_cliente;
float monto;
} datos_ingr;
FILE *ap_archivo;
FILE *ap_temporal;
datos_ingr ingresos, aux, registros [MAX_VENTAS];
void registrar(void)
{
int i;
ap_archivo=fopen("ventas.txt", "w");
for(i=1;i<=MAX_VENTAS; i++)
{
printf("\n Folio: ");
scanf("%d",& ingresos.folio);
printf("\n Cliente: ");
scanf("%d",& ingresos.id_cliente);
printf("\n Monto: ");
scanf("%f",& ingresos.monto);
fwrite(&ingresos,sizeof(datos_ingr), 1, ap_archivo);
}
fclose(ap_archivo);
}
void leer(void)
{
ap_archivo = fopen("ventas.txt","r");
printf("\nVentas\n");
while(!feof(ap_archivo))
{
fread(&ingresos,sizeof(datos_ingr),1,ap_archivo);
printf("\nFolio: %d",ingresos.folio);
printf("\tCliente: %d",ingresos.id_cliente);
printf("\tMonto: %7.2f",ingresos.monto);
}
fclose(ap_archivo);
getch();
}
void seleccion(void)
{
int i, aux=0, x=0, temp=0, tmp=0, a[MAX_VENTAS];
ap_archivo=fopen("ventas.txt","r");
ap_temporal=fopen("leer_seleccion.txt","w");
while(!feof(ap_archivo) && i<=MAX_VENTAS)
{
fread(®istros,sizeof(ingresos),1,ap_archivo);
i++;
}
for(i=0;i<=MAX_VENTAS-1; i++)
{
aux=1;
tmp=aux;
for(x=i+1; x<=MAX_VENTAS;x++)
{
if(registros[i-1].folio >= a[MAX_VENTAS])
{
aux=x;
tmp=a[x];
}
}
temp=a[MAX_VENTAS];
a[MAX_VENTAS]=a[aux];
a[aux]=temp;
}
printf("\n\nArreglo ordenado\n");
for(i=0;i<MAX_VENTAS;i++)
{
fwrite(®istros,sizeof(ingresos),1,ap_temporal);
printf("%d",registros.folio);
printf("\t%d",registros.id_cliente);
printf("\t%7.2f\n",registros.monto);
}
getch();
fclose(ap_temporal);
fclose(ap_archivo);
}
void leer_seleccion(void)
{
ap_temporal=fopen("leer_seleccion.txt", "r");
printf("\nOrdenados por el metodo de seleccion\n");
while(!feof(ap_temporal))
{
fread(&ingresos,sizeof(datos_ingr),1, ap_temporal);
printf("\nFolio: %d",ingresos.folio);
printf("\tCliente: %d",ingresos.id_cliente);
printf("\tMonto: %7.2f",ingresos.monto);
}
fclose(ap_temporal);
getch();
}
int main(void)
{
registrar();
leer();
seleccion();
leer_seleccion();
return 0;
}
el problema se encuentraen negritas y cursiva, el problema consiste en que no me lee los datos de la estructura, me lee números aleatorios. Seria de mucha ayuda que me auxilien en resolverlo.
A continuación se presenta el código
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define MAX_VENTAS 5
typedef struct datos{
int folio, id_cliente;
float monto;
} datos_ingr;
FILE *ap_archivo;
FILE *ap_temporal;
datos_ingr ingresos, aux, registros [MAX_VENTAS];
void registrar(void)
{
int i;
ap_archivo=fopen("ventas.txt", "w");
for(i=1;i<=MAX_VENTAS; i++)
{
printf("\n Folio: ");
scanf("%d",& ingresos.folio);
printf("\n Cliente: ");
scanf("%d",& ingresos.id_cliente);
printf("\n Monto: ");
scanf("%f",& ingresos.monto);
fwrite(&ingresos,sizeof(datos_ingr), 1, ap_archivo);
}
fclose(ap_archivo);
}
void leer(void)
{
ap_archivo = fopen("ventas.txt","r");
printf("\nVentas\n");
while(!feof(ap_archivo))
{
fread(&ingresos,sizeof(datos_ingr),1,ap_archivo);
printf("\nFolio: %d",ingresos.folio);
printf("\tCliente: %d",ingresos.id_cliente);
printf("\tMonto: %7.2f",ingresos.monto);
}
fclose(ap_archivo);
getch();
}
void seleccion(void)
{
int i, aux=0, x=0, temp=0, tmp=0, a[MAX_VENTAS];
ap_archivo=fopen("ventas.txt","r");
ap_temporal=fopen("leer_seleccion.txt","w");
while(!feof(ap_archivo) && i<=MAX_VENTAS)
{
fread(®istros,sizeof(ingresos),1,ap_archivo);
i++;
}
for(i=0;i<=MAX_VENTAS-1; i++)
{
aux=1;
tmp=aux;
for(x=i+1; x<=MAX_VENTAS;x++)
{
if(registros[i-1].folio >= a[MAX_VENTAS])
{
aux=x;
tmp=a[x];
}
}
temp=a[MAX_VENTAS];
a[MAX_VENTAS]=a[aux];
a[aux]=temp;
}
printf("\n\nArreglo ordenado\n");
for(i=0;i<MAX_VENTAS;i++)
{
fwrite(®istros,sizeof(ingresos),1,ap_temporal);
printf("%d",registros.folio);
printf("\t%d",registros.id_cliente);
printf("\t%7.2f\n",registros.monto);
}
getch();
fclose(ap_temporal);
fclose(ap_archivo);
}
void leer_seleccion(void)
{
ap_temporal=fopen("leer_seleccion.txt", "r");
printf("\nOrdenados por el metodo de seleccion\n");
while(!feof(ap_temporal))
{
fread(&ingresos,sizeof(datos_ingr),1, ap_temporal);
printf("\nFolio: %d",ingresos.folio);
printf("\tCliente: %d",ingresos.id_cliente);
printf("\tMonto: %7.2f",ingresos.monto);
}
fclose(ap_temporal);
getch();
}
int main(void)
{
registrar();
leer();
seleccion();
leer_seleccion();
return 0;
}