Saludos, tengo el siguiente codigo que me tiene que colocar el puntero en el caracter que se encuentre en la mitad de un texto, leerlo y despues imprimirlo, el codigo funciona correctamente, la duda que tengo es que a la hora de imprimir lo hago con un printf y cuando a ese printf le digo que tome el caracter de la mitad con getc() me imprime el caracter que le sigue al de la mitad, o sea uno mas, y no se por que se comporta asi esta funcion,
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
int fin,mitad;
char letra;
FILE *fd;
if((fd = fopen("F:\\archivo_fuente.txt","r"))!=NULL)
{
fseek(fd,-1,SEEK_END);
fin = ftell(fd);
printf("%d\n",fin);
mitad = fin/2;
printf("%d\n",mitad);
fseek(fd,mitad,SEEK_SET);
fread(&letra,sizeof(char),1,fd);
printf("%c",getc(fd));
}
else
printf("No se pudo abrir archivo");
return 0;
}
y si al printf le pongo
fread(&letra,sizeof(char),1,fd);
printf("%c",letra);
aqui si me imprime el caracter que se encuentra en la mitad y no el que le sigue. cual es la diferencia??
de antemano gracias
Hola.
Sin dudas se debe a la lectura que previamente haces con fread ya que de ese modo desplazas el apuntador del archivo y luego lógicamente, lees el próximo con fgetc.
Si cambias por:
...
printf("Caracter central: %c", letra);
...
tendría que funcionar.
Pero si tu intención es sólo mostrar el caracter central, podrias hacer:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fd;
if((fd = fopen("C:\\PRUEBA.txt","rt"))!= NULL) {
fseek(fd, 0L, SEEK_END);
fseek(fd, ftell(fd) >> 1, SEEK_SET);
printf("Caracter central: %c", fgetc(fd));
fclose(fd);
}
else
printf("No se pudo abrir archivo");
return 0;
}
Saludos :)