2301_77290841 2023-04-03 10:53 采纳率: 100%
浏览 180
已结题

while循环结束不了,printf未输出

#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<math.h>
int main()

```c
{
    float c,h,p,GP,GPA,sum1 = 0, sum2 = 0;
    while (scanf("%f%f", &c, &h) != EOF)
    {
        if (c >= 60 || c <= 100)
        {
            p = ((100 - c), 2);
            GP = 4 - (3.0 / 1600.0) * p;
        }
        else if (c >= 0 || c < 60)
        {
            GP= 0;
        }
        sum1 = sum1 + h;
        sum2 = sum2 + GP * h;
    }
    GPA = sum2 / sum1;
    printf("总GPA为:%.2f", GPA);
    return 0;
}

while循环结束不了,printf没有显示
```

  • 写回答

12条回答 默认 最新

  • 社区专家-Monster-XH 2023-04-03 10:58
    关注

    修改如下

    
    #define  _CRT_SECURE_NO_WARNINGS 
    #include<stdio.h>
    #include<math.h>
    int main()
    {
        float c, h, p, GP, GPA, sum1 = 0, sum2 = 0;
        while (scanf("%f%f", &c, &h) == 2)
        {
            if (c >= 60 && c <= 100)
            {
                p = pow((100 - c), 2);
                GP = 4 - (3.0 / 1600.0) * p;
            }
            else if (c < 60 && c >= 0)
            {
                GP = 0;
            }
            sum1 = sum1 + h;
            sum2 = sum2 + GP * h;
        }
        GPA = sum2 / sum1;
        printf("总GPA为:%.2f", GPA);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    2301_77290841 2023-04-03 11:10

    为什么修改为==2?

    回复
    社区专家-Monster-XH 回复 2301_77290841 2023-04-03 11:15

    我认为呢,while来判断scanf返回值是否等于EOF,但输入的浮点数格式不正确时,scanf函数会返回0,而不是EOF,所以循环无法结束了。我的想法是,修改为==2,因为每次scanf函数成功读入两个浮点数时返回值为2,可确保循环只在成功读入两个浮点数时执行。大概就是这么个想法

    回复
查看更多回答(11条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 已采纳回答 4月6日
  • 创建了问题 4月3日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部