| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1059 人关注过本帖
标题:还是文件操作问题!(一直掌握不太好)
只看楼主 加入收藏
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:13 
还是文件操作问题!(一直掌握不太好)
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define N 5
#define M 3
struct stu
{
    char name[10];
    int num;
   
    float score[3];
    float ave;
}stu[N];
void main()
{
    int i,j;
    float sum=0.0;
    FILE *fp;
    printf("请输入N=5个学生的信息:\n");
    for(i=0;i<N;i++)
    {
        printf("请输入第%d个学生的信息:\n",i+1);
        printf("name:\n");
        scanf("%s",stu[i].name);
        printf("NO.:\n");
        scanf("%d",&stu[i].num);
        for(j=0;j<M;j++)
        {
            printf("请输入第%d们成绩:\n",j+1);
            scanf("%f",&stu[i].score[j]);
            sum+=stu[i].score[j];
        }
        stu[i].ave=sum/M;

   
    }
    

   
    if((fp=fopen("E:\\stud.txt","wb"))==NULL)
    {
        printf("cannot open file\n");
        exit(0);
    }
//    fp=fopen("E:\\stud.txt","w");
    for(i=0;i<N;i++)
        if(fwrite(&stu[i],sizeof(struct stu),1,fp)!=1)
            printf("file write error\n");
        fclose(fp);

fp=fopen("stud.txt","rb");
for(i=0;i<N;i++)
{
    fread(&stu[i],sizeof(struct stu ),1,fp);
    printf("\n%s,%d,%.2f,%.2f,%.2f,%.2f\n",stu[i].name,stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
}
fclose(fp);


}
这个程序是处理学生数据的(处理完后就把内容存到指定的盘里)!能正常输入数据!但是一敲回车键是就弹出内存不能为read!请谁有空看一下!不盛感激
搜索更多相关主题的帖子: 文件 
2010-07-15 15:34
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:4 
fp=fopen("stud.txt","rb");
路径不对 从哪里来 就从回到哪里
fp=fopen("E:\\stud.txt","wb")

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-15 15:50
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:1 
不过你试了没有do8do8do8,貌似还是不行

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-15 16:50
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 2楼 do8do8do8
恩!我就是从那种写法改成这样子的!还是不行!两种都是不行啊
2010-07-15 16:55
束缚袭霜
Rank: 2
等 级:论坛游民
帖 子:21
专家分:30
注 册:2010-7-4
收藏
得分:5 
看看我的,不过还是有问题,不知为什么。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define N 1
#define M 3
struct stu
{
    char name[8];
    int num;   
    int score[3];
    int ave;
}stu[N];
void main()
{
    int i,j;
    char c;
    float sum=0.0;
    FILE *fp;
    printf("请输入N=1个学生的信息:\n");
    for(i=0;i<N;i++)
    {
        printf("请输入第%d个学生的信息:\n",i+1);
        printf("name:\n");
        scanf("%s",stu[i].name);
        printf("NO.:\n");
        scanf("%d",&(stu[i].num));
        for(j=0;j<M;j++)
        {
            printf("请输入第%d们成绩:\n",j+1);
            scanf("%f",&(stu[i].score[j]));
            sum+=(stu[i].score[j]);
        }
        
        printf("01\n");
        c=getchar();
        
        stu[i].ave=sum/M;
        
        printf("02\n");
        c=getchar();
   
    }
    

   
    if((fp=fopen("stud.txt","wb"))==NULL)
    {
        printf("cannot open file\n");
    }
//    fp=fopen("E:\\stud.txt","w");
      printf("03\n");
    for(i=0;i<N;i++)
        if(fwrite(&stu[i],sizeof(struct stu),1,fp)!=1){
            printf("file write error\n");
        }            
        fclose(fp);
        
        printf("04\n");
        c=getchar();

    if((fp=fopen("stud.txt","rb"))==NULL)
    {
        printf("cannot open file\n");
    }
    
    printf("05\n");
    c=getchar();
    
for(i=0;i<N;i++)
{
    fread(&stu[i],sizeof(struct stu ),1,fp);
    printf("\n%s,%d,%d,%d,%d,%d\n",stu[i].name,stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
}
fclose(fp);
c=getchar();

}

结果:
输入:asd \n 1 \n 74 \n 85 \n 12 \n
输出:asd,1,1116995584,1118437376,1094713344,1110048768
dev-c++ 4.9.9.2

我是自学的,所以……
2010-07-15 17:51
束缚袭霜
Rank: 2
等 级:论坛游民
帖 子:21
专家分:30
注 册:2010-7-4
收藏
得分:0 
哦,把中间那个成绩录入改为%d的结果是正确的;

呃,后来改回float格式又对了=_=!!

我是自学的,所以……
2010-07-15 17:59
束缚袭霜
Rank: 2
等 级:论坛游民
帖 子:21
专家分:30
注 册:2010-7-4
收藏
得分:0 
哈哈,其实楼主除了那个文件打开的地址之外没错,就是,在最后加个scanf("%d",&i);使自己有时间看到结果输出就行了。

我是自学的,所以……
2010-07-15 18:14
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:10 
我改好了:
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1
#define M 3
struct stu
{
    char name[8];
    int num;  
    float score[3];
    float ave;
}stu[N];
void main()
{
    int i,j;
    float sum=0.0;
    FILE *fp;
    printf("请输入N=1个学生的信息:\n");
    for(i=0;i<N;i++)
    {
        printf("请输入第%d个学生的信息:\n",i+1);
        printf("name:\n");
        gets(stu[i].name);
        printf("NO.:\n");
        scanf("%d",&stu[i].num);
        for(j=0;j<M;j++)
        {
            printf("请输入第%d们成绩:\n",j+1);
            scanf("%f",&stu[i].score[j]);
            sum=sum+stu[i].score[j];
        }
         stu[i].ave=sum/M;
}
    

  
    if((fp=fopen("stud.txt","w"))==NULL)
    {
        printf("cannot open file\n");
    }
    fp=fopen("stud.txt","w");
    for(i=0;i<N;i++)
        if(fwrite(&stu[i],sizeof(struct stu),1,fp)!=1){
            printf("file write error\n");
        }           
        fclose(fp);
    //if((fp=fopen("stud.txt","rb"))==NULL)
    //{printf("cannot open file\n");}
    for(i=0;i<N;i++)
    {
    fread(&stu[i],sizeof(struct stu ),1,fp);
    printf("\nthe name is ");puts(stu[i].name);
    printf("the number is %d\n the first great is%f\n the second great is %f\n the third great is %f\n the ave is=%f\n",stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
    }
    fclose(fp);
    getchar();

}




欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-15 18:18
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
谢谢以上各位!不过为什么读入到指定文件夹里的还是乱码呢!?不是我输入的数据啊
2010-07-15 21:17
zisefengye
Rank: 5Rank: 5
等 级:职业侠客
帖 子:167
专家分:386
注 册:2010-6-27
收藏
得分:5 
score是数组,数组是指针,所以只要写scanf("%f", stu[i].score[j])。文件是二进制的,所以直接打开是乱码
2010-07-15 21:23
快速回复:还是文件操作问题!(一直掌握不太好)
数据加载中...
 
   



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

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