Pregunta

otra pregunta , < a href = "https://stackoverflow.com/users/179910/jerry-coffin"> Jerry Ataúd señaló lo siguiente:

  

Es de (probablemente) no es realmente relacionada con su pregunta, pero while (!feof(fileptr)){ es más o menos un error garantizada.

pensé que empezaría una pregunta separada ya que el comentario es un poco fuera de tema. ¿Podría alguien explicarme esto? Este fue el primer programa que he escrito en C recta antes.

¿Fue útil?

Solución

La razón de esta afirmación es que feof está siendo falsa (inicialmente) cuando se ha alcanzado el final del archivo -. Sólo se hace realidad después del primer intento fallido leer más allá del final del archivo

Por lo tanto

char mychar;
while(!feof(fileptr))
{
    fread(&mychar, sizeof(char), 1, fileptr);
    fprintf(stderr, "The char is '%c'.\n", mychar);
}

procesará con un carácter demasiado.

La forma correcta es comprobar el valor de retorno de fread (o cualquier función que está utilizando para leer) o, alternativamente, para llamar feof después la función que hace la lectura. Por ejemplo:

char mychar;
while(fread(&mychar, sizeof(char), 1, fileptr) > 0)
    fprintf(stderr, "The char is '%c'.\n", mychar);

Otros consejos

Google encuentra esto: http://www.drpaulcarter.com /cs/common-c-errors.php#4.2

Se dice que "El autor todavía no ha visto ningún estudiante utilizar la función feof () correctamente!"

Para resumir, las funciones del archivo C como valores de estado de retorno fread fwrite y de todos modos que no debe ignorar . Comprobación del valor de feof es uno de los pernos de la puerta del establo después que el caballo ya se ha escapado tipo de cosas.

scroll top