沐丶心 发表于 2020-4-23 20:45:59

莫名陷入死循环OvO

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

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

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

}
为啥输出q不应该是退出循环吗{:10_285:}
怎么还一直陷入死循环
有没有大佬知道提醒一下{:10_297:}

liuzhengyuan 发表于 2020-4-23 20:53:31

你的 'q' 是字符,而 ch 是整形数组

沐丶心 发表于 2020-4-23 20:55:10

liuzhengyuan 发表于 2020-4-23 20:53
你的 'q' 是字符,而 ch 是整形数组

强制转换一下ch成字符能成不

liuzhengyuan 发表于 2020-4-23 20:56:56

沐丶心 发表于 2020-4-23 20:55
强制转换一下ch成字符能成不

建议搞个输入 -1 退出

沐丶心 发表于 2020-4-23 21:00:19

liuzhengyuan 发表于 2020-4-23 20:56
建议搞个输入 -1 退出

换成if(ch == 0)貌似也不行{:10_285:}

liuzhengyuan 发表于 2020-4-23 21:03:50

沐丶心 发表于 2020-4-23 21:00
换成if(ch == 0)貌似也不行

我这里是可以运行的

Cool_Breeze 发表于 2020-4-24 18:15:40

输入-1就提前结束输入就好了!为什么要输入字符退出呢!

superbe 发表于 2020-4-24 19:14:36

本帖最后由 superbe 于 2020-4-24 19:18 编辑

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

    return 0;
}
页: [1]
查看完整版本: 莫名陷入死循环OvO