#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<windows.h>
struct usersdata//建立鏈表節點
{
char name[20];
char password[20];
struct usersdata *pnext;
};
typedef struct usersdata users;//結構體名稱更改
int list_number_count;
users *file_read_listnode()//從檔案中讀取到鏈表中
{
users *pHead=NULL;//設定頭指標為空指標不指向任意節點
users *pEnd,*pNew;//建立兩個臨時指標,一個為下一節點的節點,另一個為節點的最后一個節點
int list_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);
return pHead;
}
}
}
void write_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;
}
int main()
{
users *pHead;
printf("正在復制請稍后....\n");
pHead=file_read_listnode();
//write_Out(pHead);
printf("寫入完成");
Sleep(10000);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/188330.html
標籤:C語言
