Leyendo un archivo C, lee una línea extra, ¿por qué?

No sé exactamente por qué un puntero de archivo lee una línea adicional de un archivo, específicamente la última línea, aquí está el código:

<code>FILE *fp ;
fp = fopen ("mac_ip.txt", "r") ;
int mac;
char *ip = (char *) malloc(15);

while(!feof(fp)){
    fscanf(fp,"%i",&mac);
    fscanf(fp,"%s",ip);

    printf("MAC: %i\n",mac);
    printf("IP: %s\n",ip);  
}
</code>

y el archivo tiene exactamente 20 líneas, pero la línea 20 se imprime dos veces.

¿Cual es el error?

Gracias por adelantado.

Respuestas a la pregunta(6)

Su respuesta a la pregunta