1. 程式人生 > >2972: C語言習題5.24--檔案操作1

2972: C語言習題5.24--檔案操作1

文字檔案score.dic 中儲存了n名學生的資訊(班級編號,姓名,成績),每個學生資訊佔一行,每行的資料之間使用製表符分割,如下所示:

145811  fuxin 100

145811  chengxian 90

145812  zhangxue 92

145812  lijun 88

……

檔案中儲存的學生資訊按照班級編號升序排列,每個班級的人數可以不同,要求讀取檔案中所有學生的成績,計算每個班級的平均成績,將班級編號和平均成績輸出。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int num=0;          /* 班級人數計數 */
    int sumScore=0;     /* 累計成績*/
    int curClass;       /* 當前班級 */
    int curScore;       /* 當前成績 */
    int lastClass;      /* 上一個班級*/
    int readItems;      /* 正確讀入資料數目 */
    FILE *fin;          /* 輸入檔案 */
    fin=fopen("score.dic","r");     /* 開啟輸入檔案讀 */
    if(!fin) /* 檔案開啟失敗 */
    {
        fprintf(stderr,"error open file!\n");   /* 輸出錯誤資訊到標準錯誤裝置 */
        exit(-1);   /* 強制退出,並返回錯誤碼 */
    }
    /****************/
    char name[20];//在本題中,姓名只讀入卻不做處理
    fscanf(fin,"%d%s%d",&curClass, name, &curScore);
    sumScore=curScore;
    lastClass=curClass;
    num=1;
    while(fscanf(fin,"%d%s%d",&curClass, name, &curScore)!=EOF)
    {
        if(lastClass==curClass)
        {
            num++;
            sumScore+=curScore;
        }
        else
        {
            printf("%d\t%d\n",lastClass,sumScore/num);
            num=1;
            sumScore=curScore;
            lastClass=curClass;
        }
    }
    printf("%d\t%d\n",lastClass,sumScore/num);
    fclose(fin);
    /*****************/
    return 0;
}