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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


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


Desconectado Desconectado

Mensajes: 389


Ver Perfil
EOF y archivos
« en: 4 Septiembre 2013, 21:29 pm »

Saludos tengo el siguiente programa que me hace una copia de los caracteres que se encuentran en un archivo, el problema es que me imprime basura y creo que tiene que ver con que le puse EOF en el while para cuando se encuentre el fin de linea

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4.  
  5. int main()
  6. {
  7.    FILE *fo,*fd;
  8.    char buffer[50];
  9.    fo = fopen("F:\\archivo1.txt","r");
  10.    fd = fopen("F:\\archivo2.txt","w");
  11.  
  12.    if(fo == NULL || fd == NULL)
  13.       printf("Problemas al abrir archivos");
  14.    else
  15.    {
  16.        while(fread(buffer,sizeof(char),1,fo)!=EOF)
  17.            fwrite(buffer,sizeof(char),1,fd);
  18.    }
  19.    return 0;
  20. }

no se por que me imprime asi

de antemano gracias


En línea

Stereo

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: EOF y archivos
« Respuesta #1 en: 4 Septiembre 2013, 22:04 pm »

Creo que el fread está mal, el 3er parámetro debería ser la longitud de la cadena

Y deberías cerrar los archivos con fclose


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: EOF y archivos
« Respuesta #2 en: 5 Septiembre 2013, 02:58 am »

el problema es que me imprime basura y creo que tiene que ver con que le puse EOF en el while para cuando se encuentre el fin de linea
Si no tienes una referencia de calidad deberías conseguir una.

El problema se encuentra en el bucle y se debe a que comparas el valor de retorno de fread (numero de elemento leídos, siempre igual o mayor que cero) con la constante EOF (algún valor negativo).

Debes cambiarlo a:
Código
  1. while (fread(buffer, 1, 1, fo) == 1)
  2.   fwrite(buffer, 1, 1, fd);
Pero si vas a leer e imprimir carácter por carácter mejor utiliza las funciones fgetc y fputc.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines