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

如何在C语言循环迭代中更新变量A的值?

问题分析与解决方案

你的代码存在几个关键问题导致变量无法正常更新:

  1. 变量未初始化:原代码中A没有初始值,第一次进入i>=1的分支时会使用内存中的垃圾值,导致计算错误。
  2. 逻辑顺序颠倒:先计算新的猜测值k/l,再处理上一次的用户输入,导致新猜测值基于旧状态计算,无法正确更新基准值。
  3. 区间缩小逻辑缺陷:当n被不断除以2变为0后,k和l都会等于A,后续只会重复猜测同一个数,无法更新A。

修正后的代码

#include <stdio.h>

int main() 
{
    int current = 50; // 当前猜测的基准值,替代原变量A,明确初始化
    int range = 50;   // 区间范围,替代原变量n
    char response;
    
    // 首次询问
    printf("Is the number you guessed %d? (H=higher, L=lower, Y=yes)\n", current);
    scanf(" %c", &response);
    
    // 直接判断是否猜中,无需进入循环
    if (response == 'Y') {
        printf("The number you guessed is found!\n");
        return 0;
    }
    
    for (int i = 0; i < 60; i++) {
        // 先缩小区间范围
        range /= 2;
        if (range == 0) {
            // 区间无法再缩小,当前值即为答案
            printf("The number you guessed must be %d!\n", current);
            break;
        }
        
        // 根据上一次的反馈更新当前猜测值
        if (response == 'H') {
            current += range;
        } else if (response == 'L') {
            current -= range;
        }
        
        // 询问新的猜测值并获取反馈
        printf("Is the number you guessed %d? (H=higher, L=lower, Y=yes)\n", current);
        scanf(" %c", &response);
        
        // 检查是否猜中
        if (response == 'Y') {
            printf("The number you guessed is found!\n");
            break;
        }
    }
    return 0;
}

关键改进说明

  • 明确初始化变量:current直接初始化为首次猜测的50,避免未定义行为。
  • 调整逻辑顺序:先根据用户上一次的反馈更新基准值,再进行新的询问,确保每次循环都基于最新状态更新变量。
  • 修复区间缩小逻辑:当range变为0时直接判定当前值为答案,避免重复猜测同一个数。
  • 提升可读性:用字符常量'H'、'L'、'Y'替代ASCII码数字,代码逻辑更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:53:19