返回信息流用链表可以输入数据到txt文件,然后再用链表读出来。
之后一直出错,首先是读不进去,生成的txt文件全是乱码,“屯屯屯屯……”,改进后现在就是只能读出首个结构体结点的数据,然后就死了……
有人用过链表这个功能吗?或者链表根本就不能保存数据
寻求高人指导!!!
这是一条镜像帖。来源:北邮人论坛 / cpp / #43111同步于 2010/9/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
链表输入输出文件数据问题
maowenwu
2010/9/1镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#define LEN sizeof(struct shares)
#define NUM 3
struct shares
{
char name[20];
char num[20];
int date;
long price;
char sort[15];
char company[20];
struct shares * next;
};
int n=0;
struct shares * input()// 录入函数//
{
struct shares * head=0;
struct shares *p1,*p2;
while(n<NUM)
{
p1=(struct shares *)malloc(LEN);
scanf("%s %s %d %ld %s %s",p1->name,p1->num,&p1->date,&p1->price,p1->sort,p1->company);
n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
}
p2->next=0;
return(head);
}
void save(struct shares * head) //保存记录//
{
FILE * fp;
struct shares *p;
p=head;
int i;
if((fp=fopen("data.txt","wb"))==0)
{
printf("cannot open the file\n");
return;
}
for(i=0;(p+i)->next!=0;i++)
if(fwrite((p+i),LEN,1,fp)!=1) printf("file write error\n");
fclose(fp);
}
void read(struct shares *head) //读取数据//
{
int i;
struct shares *pp;
pp=head;
FILE * fp;
fp=fopen("data.txt","rb");
for(i=0;pp->next!=0;i++)
{
fread(pp,LEN,1,fp);
printf("\n%s %s %d %ld %s %s\n",pp->name,pp->num,pp->date,pp->price,pp->sort,pp->company);
pp++;
}
}
void main()
{
struct shares * head;
head=input();
save(head);
read(head);
exit(0);
}
随便输入数据 aa bb 33 33 dd gg
bb ff 33 88 ff ss
dd ff 33 99 ff gg
保存txt文件后就会出现很多很多屯啥的,读出数据时显示的也是
研究了一天,问题解决了,貌似存入文件的时候结构体指针不能存,所以要去掉next所占的字节,LEN-4,就好了(4是用sizeof测出来的;
数据读入读出都正常了,但是现在得到的txt文件很多都是屯屯屯屯……老师说不正常,需要再改。
txt文档到底是怎么保存数据的呢?(数据有些是输入的汉字)有人试过吗,保存的正常的txt是啥模样呢?
txt存的当然是各种编码……你拿个txt点另存为都有好几种呢……
拿个2进制编辑器看看
【 在 maowenwu (missing。。。) 的大作中提到: 】
: 研究了一天,问题解决了,貌似存入文件的时候结构体指针不能存,所以要去掉next所占的字节,LEN-4,就好了(4是用sizeof测出来的;
: 数据读入读出都正常了,但是现在得到的txt文件很多都是屯屯屯屯……老师说不正常,需要再改。
: txt文档到底是怎么保存数据的呢?(数据有些是输入的汉字)有人试过吗,保存的正常的txt是啥模样呢?
: ...................