| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1887 人关注过本帖
标题:[求助]文件流_结构体怎么写入磁盘中
只看楼主 加入收藏
peggy_7
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-5-23
收藏
 问题点数:0 回复次数:7 
[求助]文件流_结构体怎么写入磁盘中

文件流问题``  
  有5个学生,每个学生有学号,姓名和某门课的成绩等三项信息。从键盘上输入学生的信息,把这些学生的信息按照程序从高到低写到一个名为“test”的磁盘文件中
  下面是我写的程序,但是运行后没能显示test里面的内容``后面我查看了磁盘中的test 里面都是写乱码,为什么啊`??? 我最大的问题是怎么把结构体写入磁盘中``大家帮忙看下吧  程序看起来虽然有点长,不过都是写重复的东东`` 
 
   #include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAX 2
struct student
{
char num[50];
char name[50];
float mark;
}stu[MAX];

void main()
{
void sort(struct student *stu);
void putout(struct student *stu);
int i;
for(i=0;i<MAX;i++)
{
scanf("%s %s %f",stu[i].num,stu[i].name,&stu[i].mark);
}
sort(stu);
putout(stu);

// 放到指定的文件中```
FILE *fp;
if((fp=fopen("test.txt","w"))==NULL)           //这里用w对吧 要不要用w+或是其他的啊
{
printf("you can not open the file ~!!");
exit(0);
}

if((fwrite(&stu[i],sizeof(struct student),1,fp))!=1)   // 这里有点不解,=1是什么意思啊??
{
printf("error");                 // 使用fwrite能将结构体写入吗??
exit(0);
}
fclose(fp);

// 读出文件内内容-------------------------------------

if((fp=fopen("test.txt","r"))==NULL)
{
printf("you can not open the file ~!!");
exit(0);
}

if (fread(&stu[i],sizeof(struct student),1,fp)!=1)
{
printf("error!");
exit(0);
}
fclose(fp);

}

void sort(struct student *stu)
{
int i,j;
struct student temp;
for(i=0;i<MAX-1;i++)
{
for(j=i+1;j<MAX;j++)
{
if(stu[i].mark<stu[j].mark)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
}


void putout(struct student *stu)
{
int i;
for(i=0;i<MAX;i++)
{
printf("%s %s %f\n",stu[i].num,stu[i].name,stu[i].mark);

}
}

搜索更多相关主题的帖子: 结构体 磁盘 文件 test include 
2007-07-19 10:30
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
收藏
得分:0 
用fwrite写结构体,文本中的确会是乱码,这是正常现象
你的程序没有看到把文件读的内容显示出来

编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-07-19 10:46
peggy_7
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-5-23
收藏
得分:0 
恩 后面我修改了 ok了 
但是我对那个"=1"不是很清楚,什么意思``?? 还有为什么要用 wb 和 rb 格式``用w 和 r 可以吗``??我试过了也可以得到答案,实质上有什么区别吗 ?为什么要定义为二进制文件
2007-07-19 10:58
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
收藏
得分:0 
几乎所有的系统的函数都会有返回值
你查下fwrite这个函数,看看他的返回值有什么意思
用w,w+,wb,这个只要你能用就行了,和fread对应即可

编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-07-19 11:02
peggy_7
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-5-23
收藏
得分:0 
  又来一题`` 在原题的基础上要加入一个新的记录`` 并且要顺序加入`` 
   如果在磁盘中扫描的时候进行 mark的对比,大与所扫描到的 mark 时,用追加的格式加入后,后面的记录会不会被覆盖啊``???
2007-07-19 11:20
SpaceC
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-6-20
收藏
得分:0 

会的
有个解决方法是建立一个临时文件,保存新的记录信息
完成后在删除原来的文件,再把临时文件改名


2007-07-19 11:22
peggy_7
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-5-23
收藏
得分:0 
 这个难度有点大`` 这程序还真麻烦``
  ps:越狱 迷` 哈 我也喜欢的`
2007-07-19 11:44
SpaceC
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-6-20
收藏
得分:0 

难度越大,解决后进步越大


2007-07-19 12:51
快速回复:[求助]文件流_结构体怎么写入磁盘中
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017086 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved