#include
#include
#include
#include
#include
structusersdata//建立链表节点
{
charname[20];
charpassword[20];
structusersdata*pnext;
};
typedefstructusersdatausers;//结构体名称更改
intlist_number_count;
users*file_read_listnode()//从文件中读取到链表中
{
users*pHead=NULL;//设置头指针为空指针不指向任意节点
users*pEnd,*pNew;//建立两个临时指针,一个为下一节点的节点,另一个为节点的最后一个节点
intlist_number_count=0;//用于判断接节点数是否只有一个
pEnd=pNew=(users*)malloc(sizeof(users));//为末节点和新接待开辟空间
FILE*fl;
fl=fopen("users.txt","r");//以只读形式打开文件
printf("test\n");
if(fl==NULL)//判断文件指针指向位置是否为空,为空则报错文件不存在
{
printf("无法读取或写入文件\n");
exit(-2);
}
while(1)//开始循环建立节点
{
printf("test\n");
list_number_count++;
if(list_number_count==1)//判断是否为第一个节点
{
pNew->pnext=NULL;//建立第一个节点
fscanf(fl,"%s%s",pNew->name,pNew->password);//读入数据到第一个节点
pEnd=pNew;//尾节点为新节点
pHead=pNew;//更新头指针为指向新节点
}
else//不是第一个节点
{
if(!feof(fl))//判断文件是否读写完成,完成返回-1(即不读完文件执行)
{
fscanf(fl,"%s%s",pNew->name,pNew->password);//从文件中读入数据
pEnd->pnext=pNew;//节点指针指向下一节点
pNew->pnext=NULL;//新节点的指针指向空
pEnd=pNew;//更新尾节点位置
pNew=(users*)malloc(sizeof(users));//为下一个新节点开一个新的空间
}
else
free(pNew);//文件读写完成后返回头节点指针
fclose(fl);
returnpHead;
}
}
}
voidwrite_Out(users*pHead)//从链表写入文件
{
users*ptemp;//定义一个临时存放头指针值的指针
FILE*fl;
fl=fopen("userscopy.text","w+");
printf("正在从程序输出信息......\n");
Sleep(1000);
ptemp=pHead->pnext;//让临时指针判断原来头指针中是否为没有节点(头节点为自定义仅用于访问使用,没有值)
if(ptemp==NULL)
return;//没有节点返回函数
while(ptemp!=NULL)//移动到最后链表节点指针是不是空的,空的就不必在写入文件跳出循环
{
fprintf(fl,"%s\t%s\n",ptemp->name,ptemp->password);//将链表信息写入文件
ptemp=ptemp->pnext;//更新指针位置
}
fclose(fl);
return;
}
intmain()
{
users*pHead;
printf("正在复制请稍后....\n");
pHead=file_read_listnode();
//write_Out(pHead);
printf("写入完成");
Sleep(10000);
return0;
}
分 -->
|