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


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

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

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)) ....}
不知李开。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值