#include
#include
#include
typedef struct Node
{
int id;
char name[20];
struct Node *next;
}Node;
/*
*按节点向文件写入数据
*/
void write()
{
FILE *f = fopen("test.txt","w");//以“w”(写)方式打开test.txt
Node *temp = (Node *)malloc(sizeof(Node));
memset(temp,0,sizeof(Node));//初始化temp
int select,count;//写数据控制器
count = 0;//控制器,控制自动生成ID
printf("按\"1\"继续,\"0\"退出:\n");
scanf("%d",&select);
while(1==select)
{
temp->id = count;
printf("自动生成数据id:%d\n",count++);
printf("输入用户名:\n");
scanf("%s",temp->name);
fwrite(temp,sizeof(Node),1,f);
printf("按\"1\"继续,\"0\"退出:\n");
scanf("%d",&select);
}
fclose(f);//当前文件的写操作执行完毕,需要关闭该操作否则会影响对当前文件的其他操作
}
/*
*从文件中读取节点,并由此建立链表
*/
void read()
{
void display_list(Node *head);
FILE *f = fopen("test.txt","r");//以"r"(读)的形式读取文件,!*文件必须存在
Node *head = (Node *)malloc(sizeof(Node));//链表头节点
Node *p = head;//工作指针,建立链表
while(!feof(f))
{
Node *newNode = (Node *)malloc(sizeof(Node));//临时节点,从文件中读取节点
memset(newNode,0,sizeof(newNode));
fread(newNode,sizeof(Node),1,f);
if(feof(f))//读取结束跳出循环
{
p->next = NULL;
break;
}
p->next = newNode;
p=newNode;
p->next = NULL;
//printf("ID = %d\nNAME = %s\n\n",newNode->id,newNode->name);
}
display_list(head);
}
/*
*输出链表
*/
void display_list(Node *head)
{
Node *p = head;//工作指针
while(p->next)
{
p=p->next;
printf("ID = %d\nNAME = %s\n\n",p->id,p->name);
}
}
int main()
{
write();
read();
return 0;
}