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

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Ayuda - Programa en C que muestra algo que no debe mostrar (FILE,fprintf,fscanf) en: 23 Junio 2016, 01:54 am
Hola, que tal, soy un hombre de 26 años, la primera ves que yo entre a esta pagina web fue hace mas de 7 años, yo me habia registrado para entonces con otro nick, y bueno esta pagina me trae muchos recuerdos, pero vamos al punto.

Sucede que estoy intentando crear un programa en el lenguaje de programación C, pero necesito ayuda, ya que el programa tiene un problema, y es que durante el tiempo de ejecucion, luego de la compilacion, presenta un error.

Es un programa que crea un archivo de registros, y tambien lo lee e imprime su contenido en pantalla.

El problema esta al momento de imprimir en pantalla los registros creados en el archivo, ya que si usted crea el archivo con 5 registros, el programa va a imprimir 6 registros, es decir, siempre imprime un registro mas que no fue solicitado, y esto no es correcto, porque yo quiero que imprima el contenido del archivo, y no registros "fantasmas".

Asi que necesito a algun experto que me ayude.

Este es el codigo en cuestion


Un programa con dos funciones, CreateFile: crea un archivo con la cantidad de registros ingresada por el usuario; y ReadFile: lee un archivo e imprime en pantalla los registros que contiene ese archivo, parece ser que en esta funcion (ReadFile) es donde esta el problema pero no puedo comprender o encontrar el error

Código
  1. // testing file structure and visibility
  2. #include "stdio.h"
  3. #include "stdlib.h"
  4.  
  5. void CreateFile();
  6. void ReadFile();
  7.  
  8. struct Record
  9. {
  10. char Charac[20];
  11. };
  12.  
  13. int main()
  14. {
  15. int Command=-1,i=0;
  16. struct Record DefaultRecord;
  17.  
  18. for(i=0;i<=19;i++)
  19. {
  20.  
  21. if(i==19)
  22. {
  23. DefaultRecord.Charac[i]='@';
  24. }
  25. else
  26. {
  27. DefaultRecord.Charac[i]='#';
  28. }
  29.  
  30. }
  31.  
  32. while(Command!=0)
  33. {
  34.  
  35. printf("Main menu:\n");
  36. printf("\n1 - Create a new file.\n");
  37. printf("2 - read a file.\n");
  38. printf("0 - end program.\n");
  39. scanf("%d",&Command);
  40.  
  41. switch(Command)
  42. {
  43. case 1:
  44. CreateFile();
  45. break;
  46. case 2:
  47. ReadFile();
  48. break;
  49. default:
  50. printf("%d is not a valid command.\n",Command);
  51. }
  52.  
  53. }
  54.  
  55. return 0;
  56. }
  57.  
  58. void CreateFile()
  59. {
  60. int nR=0,i=0,n=0,x=0;
  61. char FileName[20]; // FIX
  62. FILE *fPtr;
  63. struct Record XRecord;
  64.  
  65. for(i=0;i<=19;i++)
  66. {
  67.  
  68. if(i==19)
  69. {
  70. XRecord.Charac[i]='@';
  71. }
  72. else
  73. {
  74. XRecord.Charac[i]='#';
  75. }
  76.  
  77. }
  78.  
  79. printf("\nPlease enter the number of records to create the file: ");
  80. scanf("%d",&nR);
  81. printf("\nPlease enter the name of the file including his type (aaa.aa): ");
  82. scanf("%s",&FileName);
  83.  
  84. if((fPtr=fopen(FileName,"w"))==NULL)
  85. {
  86. printf("nFile %s could not be opened.\n",FileName);
  87. }
  88. else
  89. {
  90. for(i=1;i<=nR;i++)
  91. {
  92.    for(x=0;x<=19;x++)
  93.    {
  94.    fprintf(fPtr,"%c",XRecord.Charac[x]);
  95.    }
  96. n++;
  97. printf("n=%d\n",n);
  98. }
  99. fclose(fPtr);
  100. }
  101. }
  102.  
  103. void ReadFile()
  104. {
  105. int v=0,i=0,n=0,x=0;
  106. FILE *fPtr;
  107. char FileName[20];
  108. struct Record XRecord;
  109.  
  110. for(i=0;i<=19;i++)
  111. {
  112. if(i==19)
  113. {
  114. XRecord.Charac[i]='Y';
  115. }
  116. else
  117. {
  118. XRecord.Charac[i]='x';
  119. }
  120. }
  121. printf("\nPlease enter FileName: ");
  122. scanf("%s",&FileName);
  123.  
  124. if((fPtr=fopen(FileName,"r"))==NULL)
  125. {
  126. printf("%s could not be opened.\n",FileName);
  127. }
  128. else
  129. {
  130. printf("\n");
  131.  
  132. while(!feof(fPtr))
  133. {
  134.    n++;
  135.  
  136.    for(x=0;x<=19;x++)
  137.    {
  138.    fscanf(fPtr,"%c",&XRecord.Charac[x]);
  139.    }
  140. printf("Record Number:%d\n",n);
  141.  
  142. for(i=0;i<=19;i++)
  143. {
  144. printf("%c",XRecord.Charac[i]);
  145. }
  146. printf("\n");
  147. }
  148.  
  149. }
  150. fclose(fPtr);
  151. }
  152.  

Alguien ayudeme por favor  :-(
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines