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
相关产品推荐
相关产品推荐

