以下の青字で示されたプログラムを mule で打ち込み、"algo5.c" というファイル名で保存し、コンパイルし、実行せよ。
/* algo5.c (pp.44〜45)
*
* 日付別合計
* コントロールブレーク
*/
/*
* string.h: 文字列関数のプロトタイプ宣言(strcpy(), ctrcmp())
* strcpy(s1, s2): 文字列s2をs1にコピー
* strcmp(s1, s2): 文字列s1とs2を比較し、s1<s2のとき <0;
* s1=s2のとき =0; s1>s2のとき >0;
*/
#include <stdio.h>
#include <string.h>
int main(void) {
int flag,sum,suryo;
char hizuke[6],hokan[6];
FILE *fin;
/* 読み込み用のファイルを開く */
if((fin=fopen("algo5.dat","r"))==NULL) {
printf("Cannot open %s\n","algo5.dat");
exit(1);
}
/* 初期化 */
sum=0;
/* データを読み込み、ファイル終端のときフラッグを立てる */
if (fscanf(fin,"%s %d",hizuke, &suryo)==EOF)
flag=1;
/* 他の場合には、日付(hizuke)をhokanに保存し、フラッグを降ろす */
else {
strcpy(hokan, hizuke);
flag=0;
}
/* フラッグが立っている限り処理を繰り返す */
while (flag!=1) {
sum += suryo;
/* データを読み込み、ファイル終端のとき
* 画面に結果を出力
*/
if (fscanf(fin,"%s %d",hizuke, &suryo)==EOF) {
printf("%s, %d\n",hokan, sum);
flag=1;
}
/* 一つ前の日付と新規に読みこんだ日付が異なるとき
* 今までのデータを画面に出力し、新しい日付をhokanに保存
*/
if (strcmp(hizuke, hokan)!=0) {
printf("%s, %d\n",hokan, sum);
strcpy(hokan, hizuke);
sum=0;
}
}
fclose(fin);
return 0;
}
"algo5.dat" というファイル名で以下の7行のデータを入れたファイルを作成せよ。
このデータ・ファイルは上記のプログラムで読みこまれる。
07/01 1000
07/01 2000
07/01 5000
07/03 3000
07/03 2000
07/05 4000
07/05 3000