/* 40101.c */
/* ファイルに保存されている(改行で区切られた)レコード名を一括して読み込み、 */
/* 画面にレコード名を1個ずつ出力して、そのレコード値をキーボードから入力し、 */
/* それらの中でレコード値が最大のレコード名を画面と保存用ファイルに出力する。 */
/* 用途:登録済みの名に対し何かの数値を入力して数値最大の名を求める様な場面。 */
#include<stdio.h>
#define N 100 /* 取り扱うレコードの最大個数
*/
#define M 20 /* レコード名の最大文字数
*/
int main(){
char c;
char name[N][M]; /* レコード名 */
int value[N]; /* レコード値 */
int m[N]; /* 最大レコードが何番目かを記憶
*/
int aa,i=0,j=0,n=0,nm=0;
FILE *fp1,*fp2; /* 入力用、出力用ファイル */
for(i=0;i<N;i++){
for(j=0;j<M;j++){
name[i][j]='
';
}
}
fp1=fopen("E:40101R.dat","r");
fp2=fopen("E:40101W.dat","w");
c=getc(fp1);
i=0;
while(c!=EOF){
j=0;
while(c!='\n'){
name[i][j]=c;
j++;
c=getc(fp1);
}
i++;
c=getc(fp1);
}
n=i; /* 読み込んだレコード名の個数は n+1 個 */
/*
レコード名を順次画面に表示しそのレコード値を読込む */
printf("\n");
for(i=0;i<n;i++){
for(j=0;j<M;j++){
printf("%c",name[i][j]);
}
printf(":値? ");
scanf("%d",&value[i]);
}
/*
レコードの最大値を探し、それが何番目のレコードかを記憶する */
aa=value[0];
m[nm]=0;
for(i=1;i<n;i++){
if(aa<value[i]){
aa=value[i];
nm=0;
m[nm]=i;
}
else
if(aa==value[i]){
nm++;
m[nm]=i;
}
}
printf("\nレコード値の最大値は
%d 個あります。レコード名は、\n\n",nm+1);
fprintf(fp2,"\nレコード値の最大値は
%d 個あります。レコード名は、\n\n",nm+1);
for(i=0;i<nm+1;i++){
for(j=0;j<M;j++){
printf("%c",name[m[i]][j]);
fprintf(fp2,"%c",name[m[i]][j]);
}
printf("\n");
fprintf(fp2,"\n");
}
printf("\n以上です。<
最大値は %d です。 >\n",aa);
fprintf(fp2,"\n以上です。<
最大値は %d です。 >\n",aa);
fclose(fp1);
fclose(fp2);
return(1);
}