急!c语言高人请进,c语言,删除链表的结点,将改过后的链表保存到文件,

[复制链接]
查看11 | 回复1 | 2010-7-16 16:35:13 | 显示全部楼层 |阅读模式
struct student_link *load()
{

struct student_link *head,*p,*q;
FILE *fp;
fp=fopen("e:\\student8.dat","rb");
head=NULL;
q=(struct student_link *)malloc(sizeof(struct
student_link));/*给头结点申请空间*/
while(fread(q,sizeof(struct student_link)-4,1,fp)==1)
/*读取一位学生的信息放入结点q*/

{

q->next=NULL;

if(head==NULL)
{
head=q;


p=head;

}

else {
p->next=q;
p=p->next;
}
q=(struct student_link *)malloc(sizeof(struct student_link));
}
free(q);
fclose(fp);
return(head);
}

void main()
{

struct student_link *head;
long num;
int t;
scanf("%ld",&num);
head=load();
head=del1(head,num);
t=write(head);
/*write()运行成功返回int 0*/
printf("%d",t);
}
load()调用文件,以struct,载入链表中,函数如上第一段代码,在其他地方试过有问题
write()函数用来将删除了节点后的链表保存到文件中,这个函数我试过了没哟问题,调用的文件都没有问题,我估计是del1()函数有问题,运行时打印了write的返回值,并且调用的文件被写入了write()要写入的文件中,程序执行时好像直接跳过了del1(),del1()的代码如图?实在找不出原因?麻烦高人分析一下
谢谢 另,悬赏分是少不了的,答得好,我一定不吝惜分


回复

使用道具 举报

千问 | 2010-7-16 16:35:13 | 显示全部楼层
别的我没仔细看,刚才看了一下你的del1函数,有个小小的问题^_^while(num != p1->num){
if (p1->num == NULL)
printf("你要找的数据不存在\n"); break;
以下省略,就看上面这一句,很显然,你的本意是当查找到最后一个时就会跳出循环,但是你没有把printf语句与break用{}包围起来,结果不论if 判断的成立与否,break都会被执行了,所以修改方法如下}while(num != p1->num){
if (p1->num == NULL)
{
printf("你要找的数据不存在
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行