Bella_Notte 2022-10-13 19:38 采纳率: 88.9%
浏览 25
已结题

关于#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的成绩

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

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-10-13 19:51
    关注

    如果输入数据认为不对,重新输入,那么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--;
                }
            }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月21日
  • 已采纳回答 10月13日
  • 创建了问题 10月13日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀