首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

文件读取的有关问题,这样的格式应该如何读进去! 急

2012-02-29 
文件读取的问题,这样的格式应该怎么读进去!急急急~~typedef struct stu//学生资料{char _class[20]//班级

文件读取的问题,这样的格式应该怎么读进去! 急急急~~
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 ¦ 
------------------------------------------ 
但是你在读的时候却只按序列读数据信息,所以表头字符被当作数据读取了,自然要出错。

热点排行
Bad Request.