鱼C论坛

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

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

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

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

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

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

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

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

  29. }
复制代码

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

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

  25.     return 0;
  26. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-23 20:53:31 | 显示全部楼层
你的 'q' 是字符,而 ch[50] 是整形数组
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

强制转换一下ch[n]成字符能成不
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

建议搞个输入 -1 退出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

换成if(ch[n] == 0)貌似也不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我这里是可以运行的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 18:15:40 | 显示全部楼层
输入-1就提前结束输入就好了!为什么要输入字符退出呢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  25.     return 0;
  26. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-13 19:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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