Título: Problema con mostrar listado
Publicado por: Rhythmical en 16 Noviembre 2017, 06:49 am
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",®. numcount); printf("\nIngrese TIPO de cuenta: "); _flushall ();gets (reg. type); printf("\nIngrese saldo previo: "); scanf("%f",®. saldo); if (com1 == 0 || com2 == 0) { } if (com3 == 0 || com4 == 0) { } if (com5 == 0 || com6 == 0) { printf("\nPLAZO FIJO 30 DIAS"); } if (com7 == 0 || com8 == 0) { printf("\nPLAZO FIJO 60 DIAS"); } fwrite(® ,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"; printf("\nSE MOSTRARA LA LISTA DE LOS DATOS\n"); fread(® , sizeof(reg ),1,archi ); { printf("\nNRO DE CUENTA: %d", reg. numcount); printf("\nTIPO: ");puts (reg. type); 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(® ,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"); } printf ("\nIngrese la N cantidad de archivos ");scanf ("%d", &n ); charge(n,reg,archi); show(n,reg,archi,ns); }
como siempre espero su ayuda, Saludos!.
Título: Re: Problema con mostrar listado
Publicado por: MAFUS en 16 Noviembre 2017, 22:21 pm
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.
|