You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++循环内if判断失效原因及条件写法优化咨询

问题1:if语句无法正常运行的原因

你的if判断条件使用了逻辑与&&,要求grade < 0和grade > 100同时成立,这在逻辑上完全不可能成立——一个整数不可能同时小于0且大于100,所以该判断永远为假,内部代码自然不会触发执行。
另外当前逻辑还有隐藏缺陷:就算修改了判断条件,现有写法只会要求用户重输一次,如果第二次输入依然是非法值,程序还是会把非法值计入总分,没有做持续校验。

问题2:判断条件的优化写法

不需要拆分两个判断,仅需要把逻辑与&&替换为逻辑或||即可满足需求:只要成绩小于0或者大于100,就判定为非法值。
同时建议把单次重输的if判断改为循环校验,规避多次输入非法值的问题,优化后代码示例如下:

#include <iostream>
using namespace std;

int main()
{
    int grade, counter = 1, total = 0, average;

    while (counter <= 10)
    {
        cout << "Enter grade /100: ";
        cin >> grade;

        // 优化后的非法值判断,加入循环持续校验
        while (grade < 0 || grade > 100)
        {
            cout << "invalid grade value." << endl;
            cout << "Reenter grade value */100*: ";
            cin >> grade;
        }
        
        total = total + grade;
        counter++;
    }
    
    average = total / 10;
    
    cout << "\nThe class average is:  " << average << endl;

    return 0;
}
额外优化建议
  • 目前平均成绩计算用的是整数除法,会自动舍弃小数位,如果需要保留小数精度,可以把average定义为double类型,计算式改为average = total / 10.0
  • 如果用户输入非数字内容,cin会进入失败状态,你可以额外增加cin.fail()相关判断处理输入类型错误的场景。

内容的提问来源于stack exchange,提问作者mshelio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:45:06