| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11609 人关注过本帖
标题:高手指点!C语言读取一个文件中的数据,计算后保存到另一个文件中。
只看楼主 加入收藏
water2000
Rank: 1
等 级:新手上路
帖 子:9
专家分:3
注 册:2011-5-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
高手指点!C语言读取一个文件中的数据,计算后保存到另一个文件中。
现有10个班学生的成绩存储在1.dat,2.dat,3.dat,……10.dat中,比方说每个班5人,要求编程输出每个班各个学生各门课的平均成绩,存储在1-1.dat,2-2.dat,3-3.dat,……10-10.dat中。
1.dat文件内容为
NO.               
001    语文    85    69    74
    数学    99    93    92
    英语    74    78    73
    政治    63    76   
    历史    89    78   
    地理    79    75   
NO.               
002    语文    67    69    69
    数学    93    89    92
    英语    67    76    75
    政治    56    89   
    历史    67    90   
    地理    74    70   
NO.               
003    语文    86    87    74
    数学    78    45    56
    英语    87    34    67
    政治    51    53   
    历史    45    78   
    地理    43    55   
NO.               
004    语文    30    89    89
    数学    20    45    66
    英语    45    56    78
    政治    65    79   
    历史    89    90   
    地理    78    56   
NO.               
005    语文    98    98    56
    数学    67    90    45
    英语    66    88    99
    政治    34    54   
    历史    98    67   
    地理    56    77
   
编程输出1-1.dat文件的内容为
NO.        
001    语文    76
    数学    94.66666667
    英语    75
    政治    69.5
    历史    83.5
    地理    77
NO.        
002    语文    68.33333333
    数学    91.33333333
    英语    72.66666667
    政治    72.5
    历史    78.5
    地理    72
NO.        
003    语文    82.33333333
    数学    59.66666667
    英语    62.66666667
    政治    52
    历史    61.5
    地理    49
NO.        
004    语文    69.33333333
    数学    43.66666667
    英语    59.66666667
    政治    72
    历史    89.5
    地理    67
NO.        
005    语文    84
    数学    67.33333333
    英语    84.33333333
    政治    44
    历史    82.5
    地理    66.5

请高手帮忙,谢谢!

[ 本帖最后由 water2000 于 2011-5-29 19:17 编辑 ]
搜索更多相关主题的帖子: C语言 英语 历史 数学 语文 
2011-05-29 19:14
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:7 
程序代码:

#include <stdio.h>
struct stu
{
    char name[20];
    int chinese;
    int math;
    int english;
};
int main()
{
    FILE *fp = fopen("message.txt","r");
    stu s[6] = {0};
    for(int i = 0;i<6;i++)
    {
        fscanf(fp,"%s %d %d %d",s[i].name,&s[i].chinese,&s[i].math
            ,&s[i].english);
        printf("%s %d %d %d\n",s[i].name,s[i].chinese,s[i].math
            ,s[i].english);

    }
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册

                                         
===========深入<----------------->浅出============
2011-05-29 20:38
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
剩下的自己来吧  把信息写入文件用fprintf用法

和printf一样 只是前面多了一个fp 也就是文件指针

                                         
===========深入<----------------->浅出============
2011-05-29 20:38
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:3 
啊,晚了一步,呵呵

My life is brilliant
2011-05-29 21:13
water2000
Rank: 1
等 级:新手上路
帖 子:9
专家分:3
注 册:2011-5-29
收藏
得分:0 
回复 2楼 laoyang103
首先谢谢你!
可能我没说明白,我贴出的1.dat是个文件,1.dat这个文件是别人给的,用程序直接读取1.dat这个文件,计算出各门课各个学生的平均成绩,存到另一个文件1-1.dat中,1-1.dat这个文件是自动生成的。我需要生成1-1.dat这个文件返还给别人。
2011-05-29 22:49
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
收藏
得分:0 
回复 2楼 laoyang103
stu s[6] = {0};
这个地方前面不要 struct吗?要么就是typedef struct stu
2011-05-30 06:20
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:0 
回复 5楼 water2000
我觉得他的回复已经能够满足你的要求勒!

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-05-30 09:32
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char * get_dat_file_name(char * name, int n) {
    int i = 0, j = n;
    while(i++, j /= 10)
        ;
    j = n;
    char * temp = (char *)malloc(i);
    temp[i] = '\0';
    do {
        temp[--i] = (char)(j % 10 + 48);
    } while(j /= 10);
    strcat(name, temp);
    strcat(name, ".dat");
    free(temp);
    return name;
}

char * get_avg_file_name(char * name, int n) {
    int i = 0, j = n;
    while(i++, j /= 10)
        ;
    j = n;
    char * temp = (char *)malloc(i);
    temp[i] = '\0';
    do {
        temp[--i] = (char)(j % 10 + 48);
    } while(j /= 10);
    strcat(name, temp);
    strcat(name, "-");
    strcat(name, temp);
    strcat(name, ".dat");
    free(temp);
    return name;
}

int main(void) {
    char dat_name[15] = {0};
    char avg_name[26] = {0};
    char number[4];
    char course[3];
    FILE * dat[5], * avg_dat[5];     // n个文件把数组大小、下面的total改为n即可
    int total = 5, i, j, sum, temp; 
    for(i = 0; i < total; i++) {
        if((dat[i] = fopen(get_dat_file_name(dat_name, i + 1), "r")) == NULL) {
            printf("Can't open %s\n", get_dat_file_name(dat_name, i + 1));
            return 1;
        }
        if((avg_dat[i] = fopen(get_avg_file_name(avg_name, i + 1), "w")) == NULL) {
            printf("Can't open %s\n", get_avg_file_name(avg_name, i + 1));
            return 1;
        }
        for(j = 0; j < 15; j++)
            dat_name[j] = 0;
        for(j = 0; j < 26; j++)
            avg_name[j] = 0;
    }
    for(i = 0; i < total; i++) {
        fscanf(dat[i], "%s", number);
        fprintf(avg_dat[i], "%s\n", number);
        sum = 0;
        fscanf(dat[i], "%s", course);
        fprintf(avg_dat[i], "\t%s\t", course);
        for(j = 0; j < 3; j++) {
            fscanf(dat[i], "%d", &temp);
            sum += temp;
        }
        fprintf(avg_dat[i], "%f\n", sum / 1.0 / j);
        sum = 0;
        fscanf(dat[i], "%s", course);
        fprintf(avg_dat[i], "\t%s\t", course);
        for(j = 0; j < 3; j++) {
            fscanf(dat[i], "%d", &temp);
            sum += temp;
        }
        fprintf(avg_dat[i], "%f\n", sum / 1.0 / j);
        sum = 0;
        fscanf(dat[i], "%s", course);
        fprintf(avg_dat[i], "\t%s\t", course);
        for(j = 0; j < 3; j++) {
            fscanf(dat[i], "%d", &temp);
            sum += temp;
        }
        fprintf(avg_dat[i], "%f\n", sum / 1.0 / j);
        sum = 0;
        fscanf(dat[i], "%s", course);
        fprintf(avg_dat[i], "\t%s\t", course);
        for(j = 0; j < 2; j++) {
            fscanf(dat[i], "%d", &temp);
            sum += temp;
        }
        fprintf(avg_dat[i], "%f\n", sum / 1.0 / j);
        sum = 0;
        fscanf(dat[i], "%s", course);
        fprintf(avg_dat[i], "\t%s\t", course);
        for(j = 0; j < 2; j++) {
            fscanf(dat[i], "%d", &temp);
            sum += temp;
        }
        fprintf(avg_dat[i], "%f\n", sum / 1.0 / j);
        sum = 0;
        fscanf(dat[i], "%s", course);
        fprintf(avg_dat[i], "\t%s\t", course);
        for(j = 0; j < 2; j++) {
            fscanf(dat[i], "%d", &temp);
            sum += temp;
        }
        fprintf(avg_dat[i], "%f\n", sum / 1.0 / j);
    }
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册


格式请要对应上面的哦

图片附件: 游客没有浏览图片的权限,请 登录注册


图片附件: 游客没有浏览图片的权限,请 登录注册



[ 本帖最后由 lz1091914999 于 2011-5-30 19:43 编辑 ]

My life is brilliant
2011-05-30 16:51
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 6楼 烟雾中的迷茫
我用的C++编译器  呵呵 如果用C就一定要加上

                                         
===========深入<----------------->浅出============
2011-05-30 19:07
water2000
Rank: 1
等 级:新手上路
帖 子:9
专家分:3
注 册:2011-5-29
收藏
得分:0 
回复 8楼 lz1091914999
果然是高手,太帅了,太感谢了哥们。我都编一个星期了,没有结果。

[ 本帖最后由 water2000 于 2011-5-30 19:37 编辑 ]
2011-05-30 19:32
快速回复:高手指点!C语言读取一个文件中的数据,计算后保存到另一个文件中。
数据加载中...
 
   



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

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