我做了一个链表的通讯管理系统,这做的过程中,遇到的问题有以下几点:
1.链表的建立,刚开始不理解链表的建立为什么会通过
struct connection *s,*p,*h;
然后再建立链表,通过一些最基本的探索才明白。。char c;
struct connection *s;
while(p->next==NULL)
{
s=(struct connection*)malloc(sizeof(struct connection));
p->next=s;
//把s的地址赋值给p-next
printf("请输入编号:\n");
scanf("%d",&s->number);
printf("请输入名字:\n");
fflush(stdin);
gets(s->name);
printf("请输入地址:\n");
fflush(stdin);
gets(s->adress);
printf("请输入联系电话或者手机:\n");
fflush(stdin);
gets(s->tphone);
printf("请输入QQ号:\n");
fflush(stdin);
gets(s->qq);
p=s;
printf("是否还要继续增加?y/n\n");
fflush(stdin);
scanf("%c",&c);
if(c=='y'||c=='Y')
{
p->next=NULL;
}
p=s;
//把s的地址赋值给p
if(c!='y'&&c!='Y')
{
p->next=NULL;
break;
}
}
return head;
2.在增加记录过程中,我刚开始忽略了怎样续加的过程,到后来有人提醒后才加上,我的续加所实现的方法是令每一次增加过后的最后一个节点的next指向空,这样就使得续加得以实现,如上代码。
3.关于文件,关于文件我是用fprintf和fscanf这样的方法存储和提取的,在这过程中总结出了有几点常识:
(1)当使用feof()语句时,文件指针会指向第一个字节的下一位,也就是说,当我fsanf时,是从第二个字节开始的,所以自爱读的时候会出现“屯”或者少读一个的情况,还有就是保存的时候通过链表保存时,由于头节点是空导致了文件保存后,再去读取时会出现“屯”这种现象。所以我的解决方法是如果我的head->next是空的话,就先不建立这个文件,最后完美解决。
void os(FILE *ps,FILE *ps1,struct connection *head,struct connection *p)
//写进文件里
{
rewind(ps);
rewind(ps1);
p=head->next;
fprintf(ps,"\t****************************************************\n");
fprintf(ps,"编号\t\t名字\t\t地址\t\t电话或联系方式\t\tQQ号\n");
while(p!=NULL)
{
fprintf(ps1," %d %s %s %s %s ",p->number,p->name,p->adress,p->tphone,p->qq);
fprintf(ps,"%d %18s %18s %18s %18s\n",p->number,p->name,p->adress,p->tphone,p->qq);
p=p->next;
}
fprintf(ps,"******************************************************\n");
printf("保存成功!\n");
}
好了,该说的都已经说完了,如果哪位同学仍有对这些不理解的可以问我,我会尽自己最大的努力去解决他们。
[
本帖最后由 小菜小C 于 2011-6-12 17:47 编辑 ]