关于#C语言#的问题,如何解决?

背景:输入10个学生的成绩(范围在[0,100]内)并用数组保存输入的成绩,降序打印学生的成绩;计算平均分(保留一位小数),并统计不及格(成绩低于60分)的学生人数,降序打印成绩后,平均分和不及格学生人数各占一行。
我的代码如下:

int main(void)
{
    int  i = 0; j = 0, k=0, sum = 0, fail=0;
    int score[10] = {};
    printf("请输入10个同学的成绩:\n");
    do {
        for (i = 0; i < 10; i++)
        {
            scanf("%d", &score[i]);
            if (score[i] < 0 || score[i]>100)
                printf("请输入1~100的数:");
        }
    } while (score[i] < 0 || score[i]>100);

    for (k = 0; k < 9; k++)
    {
        for (j = 9; j > k; j--)
        {
            if (score[j] > score[j - 1])
            {
                int temp = score[j];
                score[j] = score[j - 1];
                score[j - 1] = temp;
            }
        }
    }
    printf("成绩降序为:");
    for (k = 0; k < 10; k++)
    {
        printf("%d ", score[k]);
        sum += score[k];
        if (score[k] < 60)
            fail++;
    }
    printf("\n平均分:%.1f\n", (double)(sum / 10.0));
    printf("不及格的人数:%d", fail);
}

运行结果:当第二次重新输入的时候,后面的代码就运行不了了,如图所示:

img

但如果我把do while()注释掉,这个代码能正常运行,但此时又不符合题目中只能输入0~100的成绩

不知道为什么错了可以帮我看一下吗 谢谢

如果输入数据认为不对,重新输入,那么i就需要减去1才行。因为你需要重新输入第i个值,如果不减去1,下次循环i++会增加1,从而循环不能输入足够的值
do...while和for组合很乱,do...while有点莫名其妙的用法
修改如下:

        for (i = 0; i < 10; i++)
        {
            scanf("%d", &score[i]);
            if (score[i] < 0 || score[i]>100)
            {
                printf("请重新输入1~100的数:");
                i--;
            }
        }