Hola! tratando de ayudart con este problema, vi algo q la verdad no tengo idea de porque pasa. Antes de responderte, primero necesito que ejecutes este codigo
Código C:
Ver original#include <stdio.h>
int main() {
char c;
int i=0, j=0;
FILE
*fp1
=fopen("archivo.txt", "r");
while(j<8){
printf("i:%d %d %c\n",i
,c
, c
); j++;
}
return 0;
}
El archivo.txt es el q vos tenes con: hola, adios........ Vas a ver q cuando lo ejecutas pasa algo(q hasta 1 min no sabia) interesant. Cuando ftell devuelve 4 se imprime 97 y el caracter 'a', hasta aca bien. Pero en el siguiente ciclo vas a notar que ftell no vale 5(como deberia ser) vale 6 y al lado se imprime el 10 y el salto de linea(ENTER)
La verdad nose xq despues de imprimir 'a', ftell devuelve 6 ¿y el 5??? es como que despues de la 'a' de "hola" hay dos "caracteres": uno nose(seria el 5) y el otro es el enter(el 6)
Sabiendo esto, te dejo modificado la parte del codigo q tendrias mal:
Código C:
Ver original
i++;
if(c=='\n'){
i++;// HAY Q AGREGAR UN INCREMENTO ADICIONAL
aux.
V=(int*) realloc(aux.
V,(aux.
lineas+1)*sizeof(int));aux.V[aux.lineas]=i;
aux.lineas++;
}
}
//aux.lineas++; este incremento estaria demas
return(aux);
}
Agregue un i++ dentro del if, por lo mencionado anteriormente. Comente aux.lineas++; ya q esta demas. Enrealidad no esta demas solo q despues en
ademas de restarle n tambien tendrias q restarle 1. Acordate q los arreglos van de 0 a n-1
Otra cosa para arreglar es
tendria q ser
ya q vas a guardar un caracter demas(basura en fp2). Tenes q poner ese if ya que en cierto modo estas haciendo mal el ciclo while, primero se lee del archivo luego se comprueba q no sea fin de archivo y se vuelve a leer ....ej:
Código C:
Ver originalc
=fgetc(fp1
); // primero leo del archivowhile(feof(fp1
)==0){ // compruebo
fputc(c
,fp2
); // guardo en fp2 c
=fgetc(fp1
); // vuelvo a leer}
Bueno hasta aca llega lo q pude deducir(bastante interesant aunq me qdo un vacio ya q no entendi xq pasa eso), espero q alguien pueda responder el porque de ftell salta de 4 a 6
Saludos
PD: te respondo en este foro tambien xD por si es q alguien me ayuda a mi pregunta