Lendo um arquivo C, leia uma linha extra, por quê?

Eu não sei exatamente porque um ponteiro de arquivo lê uma linha extra de um arquivo, especificamente a última linha, aqui está o 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>

e o arquivo tem exatamente 20 linhas, mas a linha 20 é impressa duas vezes.

Qual é o erro?

Desde já, obrigado.

questionAnswers(6)

yourAnswerToTheQuestion