#include <stdio.h> #include <malloc.h> #include <string.h> struct address { int a; int b; char c; struct address *next; }; void SaveToFile(struct address *p, FILE *fp) { if(p != NULL) { do { fwrite(p, sizeof(struct address), 1, fp); p = p->next; } while(p != NULL); } } int load(FILE *fp, struct address **head) { int n=0; struct address *p1,*p2; *head = (struct address *) malloc(sizeof(struct address)); memset(*head, 0, sizeof(struct address)); if( fread(*head, sizeof(struct address), 1, fp) != 1) { free(*head); *head = NULL; return(0); } p2 = *head; n++; while( !feof(fp)) { p1 = (struct address *) malloc(sizeof(struct address)); fread(p1, sizeof(struct address), 1, fp); p2->next = p1; p2 = p1; n++; } p2->next = NULL; return(n); } void main() { struct address *head; struct address *Test[10] = {0}; int i = 0; FILE *fp = NULL; for(i=0; i < 10; i++) { Test[i] = (struct address *)malloc(sizeof(struct address)); if(Test[i] != NULL) { memset(Test[i], 0, sizeof(struct address)); Test[i]->a = 65 + i; Test[i]->b = 65 + i; } } for(i = 0; i < 10; i++) { if(i < 10) { Test[i]->next = Test[i+1]; } } if((fp = fopen("addrbook.txt", "wb")) != NULL) { SaveToFile(Test[0], fp); fclose(fp); } if((fp = fopen("addrbook.txt", "rb")) != NULL) { load(fp, &head); } }
花了我半個小時,給了寫了一個簡單的例子,以下是在vs2005下調試成功,test.txt為文件名,在當前目錄下。
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
typedef struct Node
{
int num;
int score;
struct Node* next;
}Node, *Linklist;
void InitLinklist(Linklist* L) //初始化單鏈表,建立空的帶頭結點的鏈表
{
*L = (Node*)malloc(sizeof(Node));
(*L)->next = NULL;
}
void CreateLinklist(Linklist L) //尾插法建立單鏈表
{
Node *r, *s;
r = L;
int iNum, iScore;
printf("Please input the number and score:\n");
scanf("%d",&iNum);
scanf("%d",&iScore);
while(0 != iScore) //當成績為負時,結束輸入
{
s = (Node*)malloc(sizeof(Node));
s->num = iNum;
s->score = iScore;
r->next = s;
r =s;
printf("Please input the number and score:\n");
scanf("%d",&iNum);
scanf("%d",&iScore);
}
r->next = NULL; //將最後一個節點的指針域置為空
}
int WriteLinklistToFile(const char* strFile, Linklist L)
{
FILE *fpFile;
Node *head = L->next;
if(NULL == (fpFile = fopen(strFile,"w"))) //以寫的方式打開
{
printf("Open file failed\n");
return FALSE;
}
while(NULL != head)
{
fprintf(fpFile,"%d\t%d\n",head->num,head->score);
head = head->next;
}
if(NULL != fpFile)
fclose(fpFile);
return TRUE;
};
int ReadFromFile(const char* strFile)
{
FILE *fpFile;
if(NULL == (fpFile = fopen(strFile,"r"))) //以讀的方式打開
{
printf("Open file failed\n");
retur......余下全文>>
如何鏈接?順序?逆序?遞增...