Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Se Duplica la ultima linea

Estas en el tema de Se Duplica la ultima linea en el foro de C/C++ en Foros del Web. Estoy probando funciones de ficheros y he hecho el siguiente programa: Código: #include <stdio.h> #include <string.h> //Declaracion de prototipo void lee_linea(void); //Variables globales FILE *origen; ...
  #1 (permalink)  
Antiguo 06/03/2009, 10:06
Avatar de neandertal  
Fecha de Ingreso: enero-2008
Ubicación: Barcelona
Mensajes: 79
Antigüedad: 16 años, 3 meses
Puntos: 1
Pregunta Se Duplica la ultima linea

Estoy probando funciones de ficheros y he hecho el siguiente programa:

Código:
#include <stdio.h>
#include <string.h>
//Declaracion de prototipo
void lee_linea(void);
//Variables globales
FILE *origen;

int main(void){
    int i=0;
    origen=fopen("origen.txt","r");
    while(!feof(origen))lee_linea();
    fclose(origen);
}
END_OF_MAIN();

void lee_linea(void){
    //Funcion que lee la primera frase de un archivo y la muestra
    int a=0,longi=0;
    char frase[40];
    fgets(frase,40,origen);
    longi=strlen(frase);
    for(a=0; a<longi; a++)printf("%c",frase[a]);    
}
END_OF_FUNCTION(lee_linea);
El problema es que sea qual sea el archivo que abra, siempre se duplica la última linea, se escribe 2 veces, i no se a que se debe.

Alguna idea ?
  #2 (permalink)  
Antiguo 06/03/2009, 13:36
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Se Duplica la ultima linea

¿Que compilador y S.O.? A mi me funciona correctamente ... (sacando eso de END_OF_FUNCTION) ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 06/03/2009, 14:50
Avatar de neandertal  
Fecha de Ingreso: enero-2008
Ubicación: Barcelona
Mensajes: 79
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Se Duplica la ultima linea

Compilo usando gcc en consola de ubuntu, es obligatorio poner END_OF_MAIN() y END_OF_FUNCTION() ?
  #4 (permalink)  
Antiguo 06/03/2009, 15:27
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Se Duplica la ultima linea

OK, ya vi como reproducirlo, la ultima linea tiene que estar vacia. El fgets falla y el contenido de frase no se toca (esta en la pila y es indefinido, son los mismos caracteres que antes) asi que para solucionarlo podes hacer esto justo antes del fgets:

*frase = 0;

Tambien deberias comprobar el valor de retorno de fgets ...


Y no, es algo de allegro eso ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 07/03/2009, 11:02
Avatar de neandertal  
Fecha de Ingreso: enero-2008
Ubicación: Barcelona
Mensajes: 79
Antigüedad: 16 años, 3 meses
Puntos: 1
De acuerdo Respuesta: Se Duplica la ultima linea

Ok, ya entendí el problema, gracias por las aclaraciones
  #6 (permalink)  
Antiguo 07/03/2009, 11:08
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Se Duplica la ultima linea

De nadas
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:43.