C言語のプログラムについて
このプログラムが作れず困っています。分かる方教えてください。
data.datを入力し構造体型の配列に格納する(データ件数は50件以下,EOFになるまで入力)
次に<CTRL>Dが押されるまで学生番号をキー入力し,その氏名と得点を表示する。
学生番号の探索には二分探索法を使い構造体の配列を調べた回数も表示する。学生番号が存在しない場合は、存在しないことを 示すメッセージを表示する。
[実行例]
学生番号を入力してください ←入力要求のメッセージ(scanfの前に毎回入れる)
1012
1012番Sonoda Mari 得点=42点 探索回数=3回 ←学生番号,氏名,得点,探索回数を表示
学生番号を入力してください
1001
1001番Ando Ichiro 得点=73点 探索回数=1回
学生番号を入力してください
1016
1016番Nakai Kanji 得点=49点 探索回数=2回
学生番号を入力してください
1000
1000番なし
学生番号を入力してください(<CTRL>D=終了)
<CTRL>D
いちよ私が書いてみたものを載せます。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
struct GDATA
{
int bango;
char sei[11],mei[11];
int tokuten;
};
struct GDATA seiseki[50], tmp;
int i,lo,hi,flg, kensuu, bango;
FILE*fp;
if((fp=fopen("data-a.dat","r"))==NULL)
{
printf("data-a.dat OPEN ERROR!\n");
exit(1);
}
for(kensuu=0;fscanf(fp,"%d%s%s%d",&tmp.bango, tmp.sei, tmp.mei, &tmp.tokuten)!= EOF;kensuu++)
{
seiseki[kensuu] = tmp;
}
printf("学生番号を入力してください\n");
while(scanf("%d", &bango)!= EOF)
lo=0;
hi=50
flg=0;
while(flg==0&&lo<=hi)
{
i=(lo+hi)/2;
if(bango!=seiseki[i].bango)
{
if(bango<seiseki[i])hi=i-1;
elselo=i+1;
}
else flg=1;
}
if(flg==1)printf("%d番%s %s 得点=%d点\n",seiseki[i].bango,seiseki[i].sei,seiseki[i].mei,seiseki[i],tokuten);
else printf("%d番なし\n",seiseki[i].bango);
return 0;
}
お礼
ご回答ありがとうございました。 そのほかwhileの行の「{」も余計でした。