while(!feof())死循环

来源:百度知道 编辑:UC知道 时间:2024/06/16 18:10:16
#include<stdio.h>
typedef struct item{
int val;
struct item *next;
}*ptr;
ptr p,list;
int x,s;
FILE *inf,*newf;
void display()
{
rewind(inf);
while(!feof(inf)){
fscanf(inf,"%d",&s);
printf("%d",x);
}
printf("\n");
rewind(newf);
while(!feof(newf))
{fscanf(newf,"%d",&x);
printf("%d",x);
}
printf("\n");
}
void main()
{
inf=fopen("int.dat","r");
newf=fopen("newf.dat","w+");

while(!feof(inf))
{list=NULL;
fscanf(inf,"%d",&x);
while(x!=0)
{p=malloc(sizeof(struct item));
p->val=x;
p->next=list;
list=p;
fscanf(inf,"%d",&x);
}
p=list;
while(p!=NULL)
{fprintf(newf

错误不是你说的那里,while(!feof(inf))是对的,关键的错误在下面:
fscanf(inf,"%d",&x);
while(x!=0)
{p=malloc(sizeof(struct item));
p->val=x;
p->next=list;
list=p;
fscanf(inf,"%d",&x);
}
注意看前面两行:
fscanf(inf,"%d",&x);
while(x!=0)
你是以为当文件内容被读完的时候,x就会为0,就能停止循环,这是错误的!

当文件内容被读完的时候,比如你的1234567890,只是一个整数,一次就被读出了(当然读出的结果不是这么多,溢出了,那是另外的问题),下一次来fscanf的时候会失败,但是失败的fscanf不改变x的值,所以会死循环。

正确的办法是不要双重循环,只要一重循环!

文件指针下移了吗?第一个x是s吧