如何在C语言循环迭代中更新变量A的值?
问题分析与解决方案
你的代码存在几个关键问题导致变量无法正常更新:
- 变量未初始化:原代码中
A没有初始值,第一次进入i>=1的分支时会使用内存中的垃圾值,导致计算错误。 - 逻辑顺序颠倒:先计算新的猜测值
k/l,再处理上一次的用户输入,导致新猜测值基于旧状态计算,无法正确更新基准值。 - 区间缩小逻辑缺陷:当
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
相关产品推荐
相关产品推荐

