elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con mostrar listado
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con mostrar listado  (Leído 2,245 veces)
Rhythmical

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Problema con mostrar listado
« 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.

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. typedef char cadena [50];
  6.  
  7.  
  8. struct registro
  9.  
  10. {
  11. int numcount;
  12. cadena type;
  13. float saldo;
  14. };
  15.  
  16. void charge(int n, registro reg, FILE*archi)
  17. {
  18. int com1, com2, com3, com4, com5, com6, com7, com8;
  19.  
  20. cadena cad1 = "c";
  21. cadena cad2 = "C";
  22. cadena cad3 = "a";
  23. cadena cad4 = "A";
  24. cadena cad5 = "t";
  25. cadena cad6 = "T";
  26. cadena cad7 = "s";
  27. cadena cad8 = "S";
  28.  
  29. for(int i=0; i<n ;i++)
  30. {
  31. printf("\n**REGISTRO NRO: %d**",i+1);
  32. printf("\nIngrese NRO de cuenta: "); scanf("%d",&reg.numcount);
  33. printf("\nIngrese TIPO de cuenta: "); _flushall();gets(reg.type);
  34. printf("\nIngrese saldo previo: "); scanf("%f",&reg.saldo);
  35.  
  36. com1 = strcmp(reg.type,cad1);
  37. com2 = strcmp(reg.type,cad2);
  38. com3 = strcmp(reg.type,cad3);
  39. com4 = strcmp(reg.type,cad4);
  40. com5 = strcmp(reg.type,cad5);
  41. com6 = strcmp(reg.type,cad6);
  42. com7 = strcmp(reg.type,cad7);
  43. com8 = strcmp(reg.type,cad8);
  44.  
  45. if (com1 == 0 || com2 == 0)
  46. {
  47. printf("\nCUENTA CORRIENTE");
  48. }
  49. if (com3 == 0 || com4 == 0)
  50. {
  51. printf("\nCAJA DE AHORRO");
  52. }
  53. if (com5 == 0 || com6 == 0)
  54. {
  55. printf("\nPLAZO FIJO 30 DIAS");
  56. }
  57. if (com7 == 0 || com8 == 0)
  58. {
  59. printf("\nPLAZO FIJO 60 DIAS");
  60. }
  61. fwrite(&reg,sizeof(reg),1,archi);
  62. }//for
  63. }
  64.  
  65. void show(int n, registro reg, FILE *archi, float &ns)
  66. {
  67. int com1, com2, com3, com4, com5, com6, com7, com8;
  68. cadena cad1 = "c";
  69. cadena cad2 = "C";
  70. cadena cad3 = "a";
  71. cadena cad4 = "A";
  72. cadena cad5 = "t";
  73. cadena cad6 = "T";
  74. cadena cad7 = "s";
  75. cadena cad8 = "S";
  76.  
  77. system ("cls");
  78. printf("\nSE MOSTRARA LA LISTA DE LOS DATOS\n");
  79. system ("pause");
  80.  
  81. rewind(archi);
  82. fread(&reg, sizeof(reg),1,archi);
  83.  
  84. while (!feof(archi))
  85. {
  86. printf("\nNRO DE CUENTA: %d", reg.numcount);
  87. printf("\nTIPO: ");puts(reg.type);
  88.  
  89. com1 = strcmp(reg.type,cad1);
  90. com2 = strcmp(reg.type,cad2);
  91. com3 = strcmp(reg.type,cad3);
  92. com4 = strcmp(reg.type,cad4);
  93. com5 = strcmp(reg.type,cad5);
  94. com6 = strcmp(reg.type,cad6);
  95. com7 = strcmp(reg.type,cad7);
  96. com8 = strcmp(reg.type,cad8);
  97.  
  98. if (com1 == 0 || com2 == 0)
  99. {
  100. ns = reg.saldo;
  101. printf("\nSaldo actual: %.2f", ns);
  102. }
  103. else
  104. {
  105. if (com3 == 0 || com4 == 0)
  106. {
  107. ns = reg.saldo + (reg.saldo*0.03);
  108. printf("\nSaldo actual: %.2f", ns);
  109. }
  110. else
  111. {
  112. if (com5 == 0 || com6 == 0)
  113. {
  114. ns = reg.saldo + (reg.saldo*0.05);
  115. printf("\nSaldo actual: %.2f", ns);
  116. }
  117. else
  118. {
  119. if (com7 == 0 || com8 == 0)
  120. {
  121. ns = reg.saldo + (reg.saldo*0.09);
  122. printf("\nSaldo actual: %.2f", ns);
  123. }
  124. }
  125.    }
  126.    }
  127.    fread(&reg,sizeof(reg),1,archi);
  128. }
  129. }
  130.  
  131. main()
  132. {
  133. FILE *archi;
  134. int n;
  135. registro reg;
  136. float ns = 0.0;
  137.  
  138. archi = fopen("account.dat", "w+b");
  139.  
  140. if(archi = NULL)
  141. {
  142. printf("\nLo sentimos, el archivo no existe");
  143. system ("PAUSE");
  144. exit(1);
  145. }
  146. printf ("\nIngrese la N cantidad de archivos ");scanf("%d", &n);
  147.  
  148. charge(n,reg,archi);
  149. show(n,reg,archi,ns);
  150.  
  151. fclose(archi);
  152.  
  153. }

como siempre espero su ayuda, Saludos!.


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema con mostrar listado
« Respuesta #1 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.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problema para mostrar 'cargando...'
Programación Visual Basic
<[(x)]> 7 3,072 Último mensaje 21 Junio 2009, 05:38 am
por <[(x)]>
Evitar mostrar errores en mysql y en vez mostrar mensaje personalizado
Bases de Datos
Cioouw 3 11,726 Último mensaje 26 Abril 2010, 16:25 pm
por Cioouw
Problema de mostrar una lista
Java
Aeros 3 3,057 Último mensaje 10 Agosto 2010, 00:09 am
por Aeros
Mostrar listado de carpeta, eliminando su path
Scripting
ovichan 2 2,620 Último mensaje 29 Diciembre 2011, 23:46 pm
por ovichan
ayuda!!! problema de listado de archivos
ASM
bengy 3 2,770 Último mensaje 25 Mayo 2014, 21:53 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines