标题:一个用文件函数写入数据的错误
取消只看楼主
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
结帖率:100%
 问题点数:0 回复次数:6 
一个用文件函数写入数据的错误

题目是:有3名学生,从键盘上输入学生的学号,姓名,及3门课的成绩,并计算出平均成绩,然后将学生的记录和计算出的平均成绩存放在磁盘文件中:(代码如下)
#include <stdio.h>
main()
{
struct student
{
int num;
char name[10];
int score[3];
float aver;
}stu[3];
int i,j,aver;
FILE *fp;
aver=0;
if((fp=fopen("c:\\student.txt","wb"))==NULL)
{
printf("cannot open file.");
exit(0);
}
for(i=0;i<3;i++)
{
printf("enter %d num and name:",i+1);
scanf("%d%s",&stu[i].num,stu[i].name);
printf("enter score:");
for(j=0;j<3;j++)
{
scanf("%d",&stu[i].score[j]);
aver+=stu[i].score[j];
}
aver=aver/3;
stu[i].aver=aver;
aver=0;

}
for(i=0;i<3;i++)
printf("output:%3d%5s%4d%4d%6d%-5.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1], stu[i].score[2],stu[i].aver);
for(i=0;i<3;i++)
{
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("%dfile write error.",i+1);
}
fclose(fp);

}

运行此代码时能够在屏幕上显示正确数据,可是打开文件时却不正确,不知问题出在哪里?请指点……谢谢!

[此贴子已经被作者于2006-6-20 9:45:48编辑过]

搜索更多相关主题的帖子: 函数 文件 数据 student 
2006-06-20 09:41
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
得分:0 
出现了乱符

2006-06-20 09:58
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
得分:0 
1。用fwrite()函数是对内存的copy,copy到磁盘上;
2。教程上也是用fwrite()函数的;
3。用fwrite()函数一般是用“Wb“方式的;
4。可是用fread()函数依然能够读出正确数据;

2006-06-20 10:23
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
得分:0 

我运行了,能不能解释解释其中的原由


2006-06-20 11:27
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
得分:0 
如果把文件改成这样:
#include<stdio.h>
#include<stdlib.h>
main()
{
FILE*fp=fopen("c:\\unknown.txt","wb");
unsigned int a=10;
fwrite(a,sizeof(int),1,fp);
fclose(fp);
system("type c:\\unknown.txt");
}
取不同的a值后查看文件unknown的16进制可得:
a=10 file :43 20
11 20 2d
12 2d 20
13 20 43
14 43 6f
15 6f 70
…… ……

文本方式下是:16进制下对应的ASCII编码
我怎么看都不相信文件是内存的cpoy
如:a=10 内存下是:00000000 00001010
怎么会与文件的16进制对应呢
这如何解释呢?

2006-06-21 01:40
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
得分:0 

不要相信老谭了,在他编写的<<C程序设计>>第二版中,318页 例 13.3程序是错误的.

我已经运行过了.

[此贴子已经被作者于2006-6-21 17:53:38编辑过]


2006-06-21 17:53
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
得分:0 

版主说的好!如果输入数字,并要在文本文件中显示时,用fprintf()函数,我还有一个问题,就是你的代码中用了scanf()函数,我没有见过这种用法,我查了scanf()函数的具体用法,知道它能够输入指针,还有其它的一些输入值,但我没能够看懂,能不能把它的具体用法给我说一下,不是经常用的,谢谢了!


2006-06-21 19:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-73513-1-1.html




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

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