我不知道为什么文件指针从文件读取额外的行,特别是最后一行,这里是代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
并且文件正好有20行,但是第20行打印了两次.
哪个错误?
提前致谢.
因为在阅读了最后两个值后,您仍然没有按下EOF.所以循环继续.在循环的下一次传递中,fscanf实际上不会像第二次那样读取最后一行,fscanfs会失败,但printfs会打印出上一次循环传递的值.
feof在您尝试阅读更多内容之前,它不会"知道"它在文件的末尾.既然fscanf告诉你它有多少项,你可以使用这个简单的技巧:
for(;;){
if (fscanf(fp,"%i%s", &mac, ip) != 2) break;
printf("MAC: %i\n",mac);
printf("IP: %s\n",ip);
}
Run Code Online (Sandbox Code Playgroud)