MULTIMEDIA, Video digital, Grabación, Diseño gráfico, Diseño web, Programación > Webmasters - Diseño Web - Programación - Diseño gráfico

Problema con la funcion fseek

(1/1)

Arandacrack:
Hola, tengo que entregar una practica este jueves y tengo un pequeño problema con la citada función.

 for(i=cabecera.Ancho;i>0;i--){
                 printf("\n");
                     
        for(j=0;j<cabecera.Alto;j++){
      printf("i %d",i);
      fseek(fde,(cabecera.Ancho-i)*sizeof(char),SEEK_CUR);
             fread(&c, cabecera.Ancho*sizeof(char), 1, fde);                        
          fwrite(&c,sizeof(char), 1, fds);
                                 
                                  if (c<0) l=c+256;
                                  else l=c;
                                  printf("O %d \n",l);      
                   }  
                 
                 
                  system("pause");
           
             }

Esta es la parte del codigo que me da problemas. Se trata de un programa de tratamiento de imagenes, y debo de cambiar la posicion de fseek, q una vez ha leido cabecera.Alto valores(Alto de la imagen), no pasa a la siguiente columna y queda estancado en el ultimo valor. y yo creo que es por un error de fseek, pero no se cual.

Alguien que con estos poquitos datos que he proporcionado sepa algo?

Gracias

pitukilloloco:
Me parece que estás empleando mal la función fseek. Suponiendo que abriste bien el archivo (espero que no lo hayas abierto para apendizarlo), vamos a ver que es lo que haces con los dos ciclos. En el primer ciclo varias a la variable i desde cabecera.Alto hasta 0. ¿Qué sucede cuando i tiene el valor de cabecera.Alto?, pues que en el segundo ciclo, el cual varias desde j = 0 hasta j = cabecera.Ancho, la función fseek toma estos valores

--- Código: ---
fseek(fde,(cabecera.Ancho-cabecera.Ancho)*sizeof(char),SEEK_CUR);

--- Fin del código ---

o sea, sustituyendo

--- Código: ---
fseek(fde,0,SEEK_CUR);

--- Fin del código ---

o sea que nunca mueves al apuntador del archivo, pero el que si lo mueve es la instrucción que pones enseguida de esta, que es

--- Código: ---
fread(&c, cabecera.Ancho*sizeof(char), 1, fde);

--- Fin del código ---

esta instrucción provoca que el apuntador se mueva tantos bytes como tenga cabecera.Ancho. Bueno, podríamos seguir analizando que haces en cada ciclo, pero espero que con esto poco te des cuenta donde hay que cambiar el código para corregirlo.

pitukilloloco:
perdón, cometí un error al decir que i variaba de cabecera.Alto hasta 0 y j desde 0 hasta cabecera.Ancho siendo que es alrevés, sin embargo la argumentación se mantiene.

Navegación

[0] Índice de Mensajes

Ir a la versión completa