鱼C论坛

 找回密码
 立即注册
查看: 899|回复: 7

[已解决]莫名陷入死循环OvO

[复制链接]
发表于 2020-4-23 20:45:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
int main()
{
        int ch[50], n = 0, sum = 0, j;
        float a;
        while(n <50)
        {
                printf("请输入第%d个同学的英语成绩(输入q可提前退出):", n+1);
                scanf("%d", &ch[n]);
                if(ch[n] == 'q')
                {
                        break;
                }

        else  if(ch[n] < 0 || ch[n] > 100)
                {
                        printf("非法输入请重新再试\n");
                        continue;      
                }
                n++;
                sum += ch[n];
        }
        for(j = 0;j <=n;j++)
        {
                printf("结果是第%d同学英语成绩是:%d",j,ch[j]);

        }
        a = sum / (n+1);
        printf("平均分是:%.2f", a);
        return 0;

}
为啥输出q不应该是退出循环吗
怎么还一直陷入死循环
有没有大佬知道提醒一下
最佳答案
2020-4-24 19:14:36
本帖最后由 superbe 于 2020-4-24 19:18 编辑

输入q,读取整数就会失败,陷入死循环。可以改成判断是否正确输入了整数。
还有其它问题。修改过的完整代码:
#include <stdio.h>
int main()
{
    int ch[50], n = 0, sum = 0, j;
    float a;
    while (n < 50)
    {
        printf("请输入第%d个同学的英语成绩(输入q可提前退出):", n + 1);
        if (scanf("%d", &ch[n]) != 1)
            break;
        else  if (ch[n] < 0 || ch[n] > 100)
        {
            printf("非法输入请重新再试\n");
            continue;
        }
        sum += ch[n];
        n++;
    }
    for (j = 0; j < n; j++)
    {
        printf("第%d个同学英语成绩是: %d\n", j + 1, ch[j]);
    }
    a = (float)sum / n;
    printf("平均分是:%.2f\n", a);

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-23 20:53:31 | 显示全部楼层
你的 'q' 是字符,而 ch[50] 是整形数组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-23 20:55:10 | 显示全部楼层
liuzhengyuan 发表于 2020-4-23 20:53
你的 'q' 是字符,而 ch[50] 是整形数组

强制转换一下ch[n]成字符能成不
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-23 20:56:56 | 显示全部楼层
沐丶心 发表于 2020-4-23 20:55
强制转换一下ch[n]成字符能成不

建议搞个输入 -1 退出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-23 21:00:19 | 显示全部楼层
liuzhengyuan 发表于 2020-4-23 20:56
建议搞个输入 -1 退出

换成if(ch[n] == 0)貌似也不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-23 21:03:50 | 显示全部楼层
沐丶心 发表于 2020-4-23 21:00
换成if(ch[n] == 0)貌似也不行

我这里是可以运行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 18:15:40 | 显示全部楼层
输入-1就提前结束输入就好了!为什么要输入字符退出呢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 19:14:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 superbe 于 2020-4-24 19:18 编辑

输入q,读取整数就会失败,陷入死循环。可以改成判断是否正确输入了整数。
还有其它问题。修改过的完整代码:
#include <stdio.h>
int main()
{
    int ch[50], n = 0, sum = 0, j;
    float a;
    while (n < 50)
    {
        printf("请输入第%d个同学的英语成绩(输入q可提前退出):", n + 1);
        if (scanf("%d", &ch[n]) != 1)
            break;
        else  if (ch[n] < 0 || ch[n] > 100)
        {
            printf("非法输入请重新再试\n");
            continue;
        }
        sum += ch[n];
        n++;
    }
    for (j = 0; j < n; j++)
    {
        printf("第%d个同学英语成绩是: %d\n", j + 1, ch[j]);
    }
    a = (float)sum / n;
    printf("平均分是:%.2f\n", a);

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 19:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表