(不知如何修正,求指点)一个用C语言实现将TXT文件数据加载到链表的程序

爸我真没去网吧 北京沃丰时代数据科技有限公司 其他  2014-01-19 06:24:55


可以将数据写入data中,转化成链表失败,显示为空,自己找出来一些问题,用红色标注了,哪位大侠帮小弟分析下!


*
* list.h
*
* Created on: 2014-1-18
* Author: Administrator
*/

#ifndef LIST_H_
#define LIST_H_

typedef struct stu
{
char name[10];

}Ltem;
typedef struct node *pnode;/*定义节点的指针*/
typedef struct node
{
Ltem item;
struct node *next;
}node;

typedef pnode position;
typedef pnode list;


list makeempty(list L);
//功能:生成空链表

void display(list L);
//打印链表

#endif /* LIST_H_ */



void display(list L)
{
if(L==NULL)
{
return ;
}
list p=L;
p=p->next;
while(p!=NULL)
{
printf("debug2");//此处也没有打印,P直接为NULL;
printf("%s",p->item.name);
p=p->next;
}

}

list filetolist(FILE* fp,list L)
{

list temp;
Ltem a;
while(fread(&a,sizeof(a),1,fp)>0)
{

temp=(list)malloc(sizeof(node));
temp->item=a;
temp->next=L->next;
L->next=temp;
printf("debug1");//此处未打印出来,估计是fread的问题,但是不知道如何修改!
}
return L;
}



#include<stdio.h>
#include<stdlib.h>
#include"list.h"

int main()
{
FILE* fp=NULL;
list L=NULL;
L=makeempty(L);
Ltem b[5] = {{"aa"},{"bb"},{"cc"},{"dd"},{"ee"}};

if((fp = fopen("data.txt", "wb"))==NULL)
{
printf("file open error");
}

fwrite(b, sizeof(Ltem), 5, fp);
fseek(fp, 0, SEEK_SET);
L=filetolist(fp,L);
display(L);
fclose(fp);
return 0;
}
...全文
82 点赞 收藏 5
写回复
5 条回复
爸我真没去网吧 2014年01月20日
恩,修改成wb+,后可以读了,debug1和debug2都输出了5次,但是数据没有显示出来,这边temp->item=a;是否存在不妥,修改成temp->item.name=a;时编译错误,应该如何修改?
回复 点赞
爸我真没去网吧 2014年01月20日
读链表部分换成以下内容后解决
while(1)	
		{
		temp=(list)malloc(sizeof(node));
			if(fread(&temp->item, sizeof(temp->item), 1, fp) != 1)break;//重点修改了这边,
			temp->next = L->next;
			L->next = temp;
		}
		free(temp);
	return L;
回复 点赞
熊熊大叔 2014年01月19日
应该是文件打开方式的问题,wb方式只写不读,改成wb+试试
回复 点赞
angel_su 2014年01月19日
读写用"wb+"模式;另外,写完先fflush一下再读稳当点...
回复 点赞
爸我真没去网吧 2014年01月19日
不好意思,发少一个生成空表
list makeempty(list L)
{
	L=(list)malloc(sizeof(node));
	L->next=NULL;
	return L;
}
list makeempty(list L) { L=(list)malloc(sizeof(node)); L->next=NULL; return L; }
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告