2972: C語言習題5.24--檔案操作1
阿新 • • 發佈:2019-01-03
文字檔案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; }