为什么我这个输出超限呢?

/*题目:
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分
输入 :
输入数据有多组,每组占一行,每行的第一个数是n(2<n<100),表示评委的人数,然后是n个评委的打分。
输出:
对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。
样例输入复制
3 99 98 97
4 100 99 98 97
样例输出复制
98.00
98.50
*/
#include <stdio.h>

int main()
{
int a[100];
int n, i, max, min, x = 0,y = 0;
scanf("%d ",&n);
while (n != EOF)
{
float avg = 0;
for (i = 0; i < n; i++)
{
scanf("%d ", &a[i]);
}
max = a[0];
min = a[0];
for (i = 0; i < n; i++)
{
if (max < a[i])
{
max = a[i];
x = i;
}
if (min > a[i]);
{
min = a[i];
y = i;
}
}
a[x] = 0;
a[y] = 0;
for (i = 0; i < n; i++)
{
avg += a[i];
}
printf("%.2f\n", avg/(n-2));
}
return 0;
}

错误1:判断输入结束是根据scanf()的结果判断,不是n,改为while(scanf("%d",&n)!=EOF)
错误2:scanf("%d") 这个%d后面不要跟空格
错误3:if (min > a[i]) ; 这个后面多了个分号

#include <stdio.h>

int main() {
    int a[100];
    int n, i, max, min, x = 0, y = 0;

    while (scanf("%d ", &n) != EOF) {
        float avg = 0;
        for (i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
        max = a[0];
        min = a[0];
        for (i = 0; i < n; i++) {
            if (max < a[i]) {
                max = a[i];
                x = i;
            }
            if (min > a[i]) {
                min = a[i];
                y = i;
            }
        }
        a[x] = 0;
        a[y] = 0;
        for (i = 0; i < n; i++) {
            avg += a[i];
        }
        printf("%.2f\n", avg / (n - 2));
    }
    return 0;
}