程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言中怎麼將文件裡的數據創建到(讀到)鏈表中?,c語言

C語言中怎麼將文件裡的數據創建到(讀到)鏈表中?,c語言

編輯:關於C語言

C語言中怎麼將文件裡的數據創建到(讀到)鏈表中?,c語言


定義的結構體:

struct student
{  
char ID[11]; //學生學號
char name[20];  //學生姓名
 
struct student *next;  //next 指針 指向 struct  student 類型的變量
}stu;

 

 

創建文件:

void Create_File_List()
{
    FILE *fp;
    if ((fp = fopen("student.txt","rb"))==NULL)                 /*如果此文件不存在*/
    {
        if ((fp = fopen("student.txt","wb+"))==NULL)
        {
            outtextxy(220, 200, "無法建立文件!");  
            
        }
    }
}


 

寫入文件信息:

/***************

函數功能:錄入出勤學生


/***************/


void add_student(  )
{
    FILE *fp;
    fp=fopen("student.txt","a+"); 
    strcpy(stu.ID,"");// 與鏈表head結點 無數據 有關
    strcpy(stu.name,"");
    fwrite(&stu,sizeof(struct student),1,fp);
    InputBox(stu.ID,11,"請輸入學生學號");
    outtextxy(380,200,stu.ID);    
    Sleep(500);
    InputBox(stu.name,20,"請輸入學生姓名");
    outtextxy(380,250,stu.name);
    Sleep(500);
    fwrite(&stu,sizeof(struct student),1,fp);
    fclose(fp);
  }

這裡值得注意的是:寫入文件的時候,開始時要事先寫入第一個數據,這裡寫入的空數據,這與鏈表head處數據為空有關。

從已經寫入的文件中讀到鏈表中:

/***************

函數功能:創建鏈表

/***************/
struct student * CreateList() 
{  
    struct student *pointer,*head,*q;//head指針為鏈表的頭結點,是找到鏈表的唯一依據,如果head指針丟失,那麼整個鏈表就找不到了;p指針總是指向新申請的結點;q指針總是指向尾節點
    struct student temp;//定義結構體別名
    FILE *fp;
    pointer=(struct student *)malloc(sizeof(struct student ));  // p指向新開辟的節點內存
    head = pointer;    //開辟頭結點內存      頭結點中沒有學生成績信息
    q = pointer;       //開辟尾節點內存   q指針總是指向尾節點
    q->next = NULL; // //標志鏈表的結束 尾節點的特點是next成員的值為NULL,它是最後一個節點,作為鏈表結束的標志,NULL是一個符號常量表示值為0的地址
    fp=fopen("student.txt","rb");
    while(fread(&temp,sizeof(struct student),1,fp)!=0)//從文件中讀結構體塊
    {      pointer=(struct student*)malloc(sizeof(struct student)); // p指向新開辟的節點內存
    strcpy(pointer->ID,temp.ID);
    strcpy(pointer->name,temp.name);
    q->next=pointer;  //把新節點掛到原尾節點之後
    q=q->next;  //q指針指向新的尾節點
    }
    q->next=NULL;//標志鏈表的結束 
    fclose(fp);
    return head;
}

 

從鏈表中輸出打印到屏幕中數據:

/***************

函數功能:
輸出鏈表 
返回:指向鏈表表頭的指針 /***************/ void Print_List(struct student *head) { struct student* pointer; pointer=head->next; //跳過無數據的頭結點 while(pointer!=NULL) { outtextxy(x,y,pointer->ID); outtextxy(x,y,pointer->name); pointer=pointer->next;//指向下一個節點 }
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved