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

for循环嵌套do-while的血压输入验证问题:非法值仍被累加求助

问题解决方案

问题根源

你的代码核心问题是:无论输入的舒张压是否合法,都会执行sumDia += dia[i],导致非法值被错误累加到总和里。

修复方案

把累加操作移到do-while循环结束之后——因为循环退出的条件是输入值在40-100范围内,此时dia[i]已经是合法值,再累加就不会出错。同时建议加上输入缓冲区清理逻辑,避免用户输入非数字时触发无限循环。

修改后的代码:

for (i = 0; i < 5; i++) {
    do {
        // 提示输入舒张压
        printf("Enter the Diastolic (bottom) part of your 5 blood pressure tests in the range 40-100 (in mmHg):\n");
        // 处理scanf失败的情况,比如输入非数字
        if (scanf("%f", &dia[i]) != 1) {
            printf("Error, please enter a valid number.\n");
            // 清空输入缓冲区的非法字符
            while (getchar() != '\n');
            // 给dia[i]赋值一个非法值,确保循环继续
            dia[i] = -1;
            continue;
        }

        if (dia[i] < 40 || dia[i] > 100) {
            printf("Error, Please input your Diastolic blood pressure within the range 40-100.\n");
        }

    } while (dia[i] < 40 || dia[i] > 100);
    
    // 循环退出后,输入合法,再累加
    sumDia += dia[i];
}

逻辑说明

  1. 累加时机调整:只有当输入通过合法性校验(do-while循环正常退出),才将dia[i]加入总和,彻底避免非法值混入。
  2. 输入异常处理:增加scanf返回值判断,如果用户输入非数字(比如字母、符号),会提示错误并清空缓冲区,防止非法字符留在缓冲区导致后续scanf持续失败,引发无限循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:57:17