while(!feof(...)) 中加if(!feof(...)) 问题

来源:互联网 发布:pymongo 连接数据库 编辑:程序博客网 时间:2024/05/13 14:24


在做课设时,经常会遇到莫名其妙的乱码,其中可能的原因有这样一种;

李开给的例子程序中有这样的写法:

while (!feof(pFile))
{
pDormNode = (DORM_NODE *)malloc(sizeof(DORM_NODE));
fread(pDormNode, sizeof(DORM_NODE), 1, pFile);
pDormNode->snext = NULL;
pDormNode->next = hd;
hd = pDormNode;
}以前都没注意,n天前问了苏宙行,他说这地方是不对的,需要加一个判断 if(!feof(pFile))今天有何胡伟政讨论了一下,原因大致明白了当fead最后一段文件信息时,已经到文件结尾,但feof()”函数返回的是最后一次“读操作的内容而不是地址”以前都弄错啦。。。也就是说:当读完最后一段信息时,feof(pFile)判定的是最后一个字节而不位置,所以!feof(pFile) == 1.。。while()仍进行,由于文件中已没有了信息,这样就会导致链表中出现乱码。如果这样写 while (!feof(pFile))
{
pDormNode = (DORM_NODE *)malloc(sizeof(DORM_NODE));
fread(pDormNode, sizeof(DORM_NODE), 1, pFile);if(!feof(pFile)) {
pDormNode->snext = NULL;
pDormNode->next = hd;
hd = pDormNode;
}free(pDormNode);}当读到文件结尾又读文件时,if(!feof(pFile))就不成立,这段不确定的信息就不会加到链表中,也就可以避免乱码啦。。。不过书上用时都是while(!feof(pFile)) {..... if(!feof(pFile)) ....}
不知李开。。。。