無限に書かれてしまうのですがどうすればよいですか?
次の** for ループを最初から作りなおせばよい**でしょう。
C
1for(score=0;score<=97;score=b[5]++){
2printf("学籍番号%dの学生の英語の点数は%dです",i,b[i]);
3}
何をしたくてこんなループを書いたのか、意図がわかりません。間違い・勘違いがいくつか積み重なっているようです。
一番の問題は int b[5]; と配列を定義したのに b[5] をアクセスしていることです。確保されているのは b[0] から b[4] まで、5つの要素しかありません。そのループは b[5] という、アクセスしてはいけないメモリをアクセスしています。
二番目、「score=0;score<=97;score=b[5]++」という部分がループを作るのですが、何を意図してこう書いたのか、わかりません。意図はわかりませんが、それでもコンパイルできる以上、プログラムは動作します。
このループがどんな動作をするのか、確認することを目的にコードを書き変えてみました。
C
1#include <stdio.h>
2int main()
3{
4 int b[6]; /* b[5] を確保する */
5 b[0] = 78;
6 b[1] = 86;
7 b[2] = 72;
8 b[3] = 97;
9 b[4] = 83;
10 b[5] = 95; /* b[5] が 95 なら、どうなるか */
11 int i, score;
12
13 i = 1; /* 仮に表示したい学生番号を 1 にする */
14 for (score = 0; score <= 97; score = b[5]++) {
15 printf("学籍番号%dの点数は%dです(score = %d, b[5] = %d)\n",
16 i, b[i], score, b[5]);
17 }
18}
19
「(score = %d, b[5] = %d)」の部分で、ループ中に score と b[5] の値がどう変化するか、表示させています。動作させると次の表示になります。
学籍番号1の点数は86です(score = 0, b[5] = 95)
学籍番号1の点数は86です(score = 95, b[5] = 96)
学籍番号1の点数は86です(score = 96, b[5] = 97)
学籍番号1の点数は86です(score = 97, b[5] = 98)
私は表示する行数が4行に収まることを意図して b[5] = 95; としました。
しかし質問者のコードは、本来アクセスしてはいけない b[5] をアクセスしていました。その場合、b[5] の値がいくつだったのか、誰にもわかりません。値がわからない以上、どうなるかは運を天に任すようなものです。
質問者は上記コードをお手元でコンパイルして動作を確かめてください。さらに、b[5] の初期値を様々に変えて、例えば 90, 50, 0, -10, -100 等に変えて動作を確かめていただきたい。その頃には「無限に書かれてしまう」状況が見えてくるはずです。
そのうえで、結論に戻りますが、上記ループを最初から考え直すことです。