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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


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


Desconectado Desconectado

Mensajes: 389


Ver Perfil
getc() y printf
« en: 12 Septiembre 2013, 22:11 pm »

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,

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4.  
  5. int main()
  6. {
  7.    int fin,mitad;
  8.    char letra;
  9.    FILE *fd;
  10.    if((fd = fopen("F:\\archivo_fuente.txt","r"))!=NULL)
  11.    {
  12.        fseek(fd,-1,SEEK_END);
  13.        fin = ftell(fd);
  14.        printf("%d\n",fin);
  15.        mitad = fin/2;
  16.        printf("%d\n",mitad);
  17.        fseek(fd,mitad,SEEK_SET);
  18.        fread(&letra,sizeof(char),1,fd);
  19.        printf("%c",getc(fd));
  20.    }
  21.    else
  22.       printf("No se pudo abrir archivo");
  23.    return 0;
  24. }
  25.  

y si al printf le pongo

Código
  1. fread(&letra,sizeof(char),1,fd);
  2.        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


En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: getc() y printf
« Respuesta #1 en: 12 Septiembre 2013, 23:44 pm »

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:
Código
  1.  
  2.  ...
  3.  printf("Caracter central: %c", letra);
  4.  ...
  5.  
tendría que funcionar.

Pero si tu intención es sólo mostrar el caracter central, podrias hacer:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.   FILE *fd;
  7.  
  8.   if((fd = fopen("C:\\PRUEBA.txt","rt"))!= NULL) {
  9.    fseek(fd, 0L, SEEK_END);
  10.    fseek(fd, ftell(fd) >> 1, SEEK_SET);
  11.    printf("Caracter central: %c", fgetc(fd));
  12.    fclose(fd);
  13.   }
  14.   else
  15.     printf("No se pudo abrir archivo");
  16.   return 0;
  17. }
  18.  

Saludos :)


« Última modificación: 12 Septiembre 2013, 23:50 pm por ecfisa » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Parametros de api printf y scanf
Programación Visual Basic
krackwar 2 6,913 Último mensaje 21 Julio 2008, 18:00 pm
por krackwar
Ayuda con Printf - Por favor
Java
ComputerScienceSolutions 1 1,769 Último mensaje 19 Junio 2014, 13:55 pm
por gordo23
Ayuda con printf - Por Favor
Programación General
ComputerScienceSolutions 2 1,989 Último mensaje 19 Junio 2014, 20:34 pm
por ComputerScienceSolutions
Problemas con printf();
Programación C/C++
soyloqbuskas 4 3,246 Último mensaje 20 Octubre 2015, 00:57 am
por soyloqbuskas
No me ejecuta el printf
Programación C/C++
GonzaJava 5 3,457 Último mensaje 13 Abril 2018, 18:39 pm
por GonzaJava
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines