Problema con mostrar listado

Iniciado por Rhythmical, 16 Noviembre 2017, 06:49 AM

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

Rhythmical

Hola a todos, bueno mi problema es el siguiente y es que al ingresar N variables al mostrar el listado me sale infinitas veces como si al valor N lo tomase como otro numero y no se  a que se debe el problema si ya aplique el rewind y el fread.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef char cadena [50];


struct registro

{
int numcount;
cadena type;
float saldo;
};

void charge(int n, registro reg, FILE*archi)
{
int com1, com2, com3, com4, com5, com6, com7, com8;

cadena cad1 = "c";
cadena cad2 = "C";
cadena cad3 = "a";
cadena cad4 = "A";
cadena cad5 = "t";
cadena cad6 = "T";
cadena cad7 = "s";
cadena cad8 = "S";

for(int i=0; i<n ;i++)
{
printf("\n**REGISTRO NRO: %d**",i+1);
printf("\nIngrese NRO de cuenta: "); scanf("%d",&reg.numcount);
printf("\nIngrese TIPO de cuenta: "); _flushall();gets(reg.type);
printf("\nIngrese saldo previo: "); scanf("%f",&reg.saldo);

com1 = strcmp(reg.type,cad1);
com2 = strcmp(reg.type,cad2);
com3 = strcmp(reg.type,cad3);
com4 = strcmp(reg.type,cad4);
com5 = strcmp(reg.type,cad5);
com6 = strcmp(reg.type,cad6);
com7 = strcmp(reg.type,cad7);
com8 = strcmp(reg.type,cad8);

if (com1 == 0 || com2 == 0)
{
printf("\nCUENTA CORRIENTE");
}
if (com3 == 0 || com4 == 0)
{
printf("\nCAJA DE AHORRO");
}
if (com5 == 0 || com6 == 0)
{
printf("\nPLAZO FIJO 30 DIAS");
}
if (com7 == 0 || com8 == 0)
{
printf("\nPLAZO FIJO 60 DIAS");
}
fwrite(&reg,sizeof(reg),1,archi);
}//for
}

void show(int n, registro reg, FILE *archi, float &ns)
{
int com1, com2, com3, com4, com5, com6, com7, com8;
cadena cad1 = "c";
cadena cad2 = "C";
cadena cad3 = "a";
cadena cad4 = "A";
cadena cad5 = "t";
cadena cad6 = "T";
cadena cad7 = "s";
cadena cad8 = "S";

system ("cls");
printf("\nSE MOSTRARA LA LISTA DE LOS DATOS\n");
system ("pause");

rewind(archi);
fread(&reg, sizeof(reg),1,archi);

while (!feof(archi))
{
printf("\nNRO DE CUENTA: %d", reg.numcount);
printf("\nTIPO: ");puts(reg.type);

com1 = strcmp(reg.type,cad1);
com2 = strcmp(reg.type,cad2);
com3 = strcmp(reg.type,cad3);
com4 = strcmp(reg.type,cad4);
com5 = strcmp(reg.type,cad5);
com6 = strcmp(reg.type,cad6);
com7 = strcmp(reg.type,cad7);
com8 = strcmp(reg.type,cad8);

if (com1 == 0 || com2 == 0)
{
ns = reg.saldo;
printf("\nSaldo actual: %.2f", ns);
}
else
{
if (com3 == 0 || com4 == 0)
{
ns = reg.saldo + (reg.saldo*0.03);
printf("\nSaldo actual: %.2f", ns);
}
else
{
if (com5 == 0 || com6 == 0)
{
ns = reg.saldo + (reg.saldo*0.05);
printf("\nSaldo actual: %.2f", ns);
}
else
{
if (com7 == 0 || com8 == 0)
{
ns = reg.saldo + (reg.saldo*0.09);
printf("\nSaldo actual: %.2f", ns);
}
}
    }
    }
    fread(&reg,sizeof(reg),1,archi);
}
}

main()
{
FILE *archi;
int n;
registro reg;
float ns = 0.0;

archi = fopen("account.dat", "w+b");

if(archi = NULL)
{
printf("\nLo sentimos, el archivo no existe");
system ("PAUSE");
exit(1);
}
printf ("\nIngrese la N cantidad de archivos ");scanf("%d", &n);

charge(n,reg,archi);
show(n,reg,archi,ns);

fclose(archi);

}


como siempre espero su ayuda, Saludos!.

MAFUS

Usa los parámetros de las funciones para pasar información a la función, no para crear variables locales.
Cuando guardes estructuras a un archivo guárdalas campo a campo, no la estructura entera, así te asegurarás que sabes cómo está contenida la información. La forma interna de la estructura la acomoda el compilador de la forma más eficiente y puede diferir a cómo la has definido, por eso guardar esa estructura directamente en el disco puede llevarte a una desagradable sorpresa.