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 哪个tomcat中startup一直一闪而过 找不出问题
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀
  • ¥50 求解vmware的网络模式问题 别拿AI回答
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网