中易网

C语言中删除一条记录的疑问?

答案:2  悬赏:40  
解决时间 2021-03-06 19:03
void deleted()
{
char s[80];
struct addr *p1,*p2,*info;
printf ("enter name:");
gets(s);
info=find(s);
if(info!=NULL)
{
if (head==info)
{
head=info->next;
printf ("deleted :%s\n",info->name);
free(info);
}
else
{
p1=head->next;
while(info!=p1)
{
p2=p1;
p1=p1->next;
}
p2->next=p1->next;
printf ("deleted:%s\n",info->name);
free(info);
}
}
else
printf ("%s not find!\n",info->name);
}

删除是通过哪个代码实现的?题中我认为是通过删除p2来达到删除s[80]里面的记录的。但是却找不到p2与s[]之间的联系。

请大侠详细解释一下!!!谢过

struct addr
{
char name[30];
char street[40];
char city[20];
char state[3];
char tel[11];
struct addr *next;
}
最佳答案
printf ("enter name:");
gets(s);
info=find(s);
输入 字符串s,然后通过find(s)函数调用查找name等于s的结点,并返回结点赋值给变量info,
if (head==info)
{
head=info->next;
printf ("deleted :%s\n",info->name);
free(info);
}
如果要删除的是头结点,将下一个结点作为新的头结点,然后删除头结点
else
{
p1=head->next;
while(info!=p1)
{
p2=p1;
p1=p1->next;
}
p2->next=p1->next;
printf ("deleted:%s\n",info->name);
free(info);
}
查找到结点info,但非头结点,查找info的前一个结点p2,让p2->next指向info->next(while执行完后p1==info),即info的前一个结点指向info其后一个结点,然后删除info结点
全部回答

没有,txt文档不是数据库,只能是全部读出来,删除某些内容,然后再保存

另一个方法是新建一个文件,一行一行地复制过去,忽略你想删除的那行,直至源文件结束,这种方法换汤不换药,估计你也会。

我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
尼康D3000怎样
复音口琴C调和C#调的有什么区别?学哪个更容
蕾奇尔生态洗衣(锦辉店)地址在什么地方,我要
腾讯游戏平台LOL助手就是更新失败
道州童心学校怎么去啊,有知道地址的么
汽车保养专家进!刚买了辆奥拓快乐王子!!
"the Turners"是什么意思?
化学化工利弊
机电一体化属于工程专业吗?想考二建
中国建设银行苏州嘉鸿支行地址在什么地方,想
绥化新龙运驾校科目一考完一个多月了科目二怎
贞歌酒吧地址在什么地方,我要处理点事
我是一个女生,我喜欢的男生很喜欢玩王者荣耀
系统怎么才能拷到U盘里,直接复制能用吗?
在漫长的成长岁月中,人人都会有快乐与欢乐,
推荐资讯
花卉小区地址在哪,我要去那里办事
鑫米乐简餐怎么去啊,有知道地址的么
异地换车牌。
针织菇怎么做
2018年网上带交闯红灯违章罚款扣不扣分
上海火车站到华东理工大学
2010年新POLO好不好
如果我们采用一条基因组序列对Swiss Prot数据
sql complete free怎么安装
昆山哪个镇工厂多,50岁以下的工作好找那吗
帮我查一个申通快递,两天没物流更新了,有内
为什么有的斯巴鲁brz车顶是黑的
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?