Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - El-Brujito

#1
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

// testing file structure and visibility
#include "stdio.h"
#include "stdlib.h"

void CreateFile();
void ReadFile();

struct Record
{
char Charac[20];
};

int main()
{
int Command=-1,i=0;
struct Record DefaultRecord;

for(i=0;i<=19;i++)
{

if(i==19)
{
DefaultRecord.Charac[i]='@';
}
else
{
DefaultRecord.Charac[i]='#';
}

}

while(Command!=0)
{

printf("Main menu:\n");
printf("\n1 - Create a new file.\n");
printf("2 - read a file.\n");
printf("0 - end program.\n");
scanf("%d",&Command);

switch(Command)
{
case 1:
CreateFile();
break;
case 2:
ReadFile();
break;
default:
printf("%d is not a valid command.\n",Command);
}

}

return 0;
}

void CreateFile()
{
int nR=0,i=0,n=0,x=0;
char FileName[20]; // FIX
FILE *fPtr;
struct Record XRecord;

for(i=0;i<=19;i++)
{

if(i==19)
{
XRecord.Charac[i]='@';
}
else
{
XRecord.Charac[i]='#';
}

}

printf("\nPlease enter the number of records to create the file: ");
scanf("%d",&nR);
printf("\nPlease enter the name of the file including his type (aaa.aa): ");
scanf("%s",&FileName);

if((fPtr=fopen(FileName,"w"))==NULL)
{
printf("nFile %s could not be opened.\n",FileName);
}
else
{
for(i=1;i<=nR;i++)
{
   for(x=0;x<=19;x++)
   {
   fprintf(fPtr,"%c",XRecord.Charac[x]);
   }
n++;
printf("n=%d\n",n);
}
fclose(fPtr);
}
}

void ReadFile()
{
int v=0,i=0,n=0,x=0;
FILE *fPtr;
char FileName[20];
struct Record XRecord;

for(i=0;i<=19;i++)
{
if(i==19)
{
XRecord.Charac[i]='Y';
}
else
{
XRecord.Charac[i]='x';
}
}
printf("\nPlease enter FileName: ");
scanf("%s",&FileName);

if((fPtr=fopen(FileName,"r"))==NULL)
{
printf("%s could not be opened.\n",FileName);
}
else
{
printf("\n");

while(!feof(fPtr))
{
   n++;

   for(x=0;x<=19;x++)
   {
   fscanf(fPtr,"%c",&XRecord.Charac[x]);
   }
printf("Record Number:%d\n",n);

for(i=0;i<=19;i++)
{
printf("%c",XRecord.Charac[i]);
}
printf("\n");
}

}
fclose(fPtr);
}


Alguien ayudeme por favor  :-(