文件读取的问题,这样的格式应该怎么读进去! 急急急~~
typedef struct stu //学生资料
{
char _class[20]; //班级
int num; //学号(两位数)
char name[8]; //姓名
float elec; //电子技术
float C_prog; //c++程序设计
float media; //多媒体
float Eng; //大学英语
float math; //大学数学
float sport; //大学体育
float polity; //政治
float ave; //平均成绩
int order; //名次
stu *next; //记录下一结点的指针
}stuNode;
学生结构体
stuNode * link; //头节点
//保存文件到本地文本文件
void SaveFile(stuNode *link)
{
FILE *fp;
if( (fp=fopen("c:\\student.txt","w+"))==NULL)
{
printf("不能打开此文件!\n");
return;
}
for(stuNode * s = link ; s != NULL ; s = s->next );
{
fprintf(fp,"%s 班级\n",s->_class);
fprintf(fp,"------------------------------------------\n" );
fprintf(fp,"|学号| 姓名 |电子技术| C++ | 多媒体 | 英语 | 数学 | 体育 |政治经济|\n" );
fprintf(fp,"------------------------------------------\n" );
fprintf(fp,"| %2d |%-8s|%7.0f|%7.0f|%7.0f|%7.0f|%7.0f|%7.0f|%7.0f|\n", s->num,
s->name,
s->elec,
s->C_prog,
s->media,
s->Eng,
s->math,
s->sport,
s->polity );
fprintf(fp,"------------------------------------------\n" );
//}
fclose(fp);
}
文件保存的内容格式如下:
1 班级
------------------------------------------
|学号| 姓名 |电子技术| C++ | 多媒体 | 英语 | 数学 | 体育 |政治经济|
------------------------------------------
| 1 |1 | 1| 1| 1| 1| 1| 1| 1|
------------------------------------------
问各位大哥读的时候应该怎么样读出来啊??
void LoadFile(stuNode *link)
{
FILE *fp;
stuNode * temp ;
if( (fp=fopen("c:\\student.txt","r"))==NULL)
{
printf("不能打开此文件!\n");
}
while(!fp)
{
stuNode * s;
fscanf(fp,"%d",s->_class);
fscanf(fp,"%d %s %f %f %f %f %f %f %f ",s->num,s->name, s->elec,s->C_prog,s->media,s->Eng, s->math, s->sport, s->polity );
s->next = NULL;
if(link == NULL)
link = s;
else
{
s->next = link->next;
link ->next = s;
}
}
fclose(fp);
}
我这里写错了! 各位大哥,应该怎么写这个读取的函数啊!
急急急~ ....
小弟在线等待 ...
或者MSN我 liulop2004@hotmail.com
小弟不胜感激!
[解决办法]
stuNode * s;
fscanf(fp,"%d",s- >_class);
在这两句之间加: s = new stuNode; 或 s = (stuNode *)malloc(sizeof(stuNode));
if(s) { printf("out of memory\n"); exit(1); }
还有程序结束前链表还要释放空间。
[解决办法]
你肯定读取有问题啦,因为你存储的时候是每个记录都存了表头的,比如你已经输入了三个学生的记录,那么按照你的存储方法文件内容应该是:
------------------------------------------
¦学号 ¦ 姓名 ¦电子技术 ¦ C++ ¦ 多媒体 ¦ 英语 ¦ 数学 ¦ 体育 ¦政治经济 ¦
------------------------------------------
¦ 1 ¦1 ¦ 1 ¦ 1 ¦ 1 ¦ 1 ¦ 1 ¦ 1 ¦ 1 ¦
------------------------------------------
------------------------------------------
¦学号 ¦ 姓名 ¦电子技术 ¦ C++ ¦ 多媒体 ¦ 英语 ¦ 数学 ¦ 体育 ¦政治经济 ¦
------------------------------------------
¦ 2 ¦2 ¦ 2 ¦ 2 ¦ 2 ¦ 2 ¦ 2 ¦ 2 ¦ 2 ¦
------------------------------------------
------------------------------------------
¦学号 ¦ 姓名 ¦电子技术 ¦ C++ ¦ 多媒体 ¦ 英语 ¦ 数学 ¦ 体育 ¦政治经济 ¦
------------------------------------------
¦ 3 ¦3 ¦ 3 ¦ 3 ¦ 3 ¦ 3 ¦ 3 ¦ 3 ¦ 3 ¦
------------------------------------------
但是你在读的时候却只按序列读数据信息,所以表头字符被当作数据读取了,自然要出错。