| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 435 人关注过本帖
标题:fwrite fread fprintf fscanf 的问题
只看楼主 加入收藏
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
结帖率:96.77%
收藏
已结贴  问题点数:20 回复次数:1 
fwrite fread fprintf fscanf 的问题
程序代码:
#include<stdio.h>
#include<stdlib.h>
struct student
{
    int num;
    char name[10];
    float score[3];
    float aver;
}stu[5];
int main(void)
{
    FILE *fp;
    char filename[20];
    int i,j;
    float sum;
    for(i=0;i<5;i++)
    {
        sum=0;
        printf("\ninput score of student %d\n",i+1);
        printf("NO: ");
        scanf("%d",&stu[i].num);
        printf("name:");
        scanf("%s",stu[i].name);
        for(j=0;j<3;j++)
        {
            printf("score %d:",j+1);
            scanf("%f",&stu[i].score[j]);
            sum=sum+stu[i].score[j];
        }
        stu[i].aver=sum/3;
    }
    puts("please input the filename:");
    scanf("%s",filename);
    if((fp=fopen(filename,"w"))==NULL)
    {
        printf("file can not open\n!");
        exit(0);
    }
    for(i=0;i<5;i++)
    {
        if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)//fprintf(fp,"%d %s %f %f %f %f",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver);
        {
            printf("file write error!\n");
        }
    }
    fclose(fp);
    fp=fopen(filename,"r");
    for(i=0;i<5;i++)
    {
        fread(&stu[i],sizeof(struct student),1,fp);//fcanf(fp,"%d %s %f %f %f %f",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver);
        printf("\n%d ,%s, %.2f, %.2f, %.2f, %.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver);
    }
    fclose(fp);
    return 0;


}
用fwite和fread的时候,能够正确的在屏幕上显示出来,在文件中是乱码,我想让在文件中不是乱码,就用了fprintf  fscanf 但是老不成功啊,不知道咋回事,我的代码如上,希望高手给予指教
2012-10-26 16:43
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:20 
程序代码:
 if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)//fprintf(fp,"%d %s %f %f %f %f",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver);
        {
            printf("file write error!\n");
        }
你把上头这段直接改成(求简便就不错误检查了)
fprintf(fp,"%d %s %f %f %f %f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver);
注意我在fprintf中加了'\n',这样你文件中数据才能分行
fread(&stu[i],sizeof(struct student),1,fp);//fcanf(fp,"%d %s %f %f %f %f",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver);
        
然后这个就改成
fscanf(fp,"%d %s %f %f %f %f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].aver);
不能输入的原因很简单,因为你的参数前没有 &
2012-10-26 17:08
快速回复:fwrite fread fprintf fscanf 的问题
数据加载中...
 
   



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

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