为何C语言do-while循环中itemdetails仅输出3次而非预期的4次?
循环次数不符预期的问题分析与修复
问题现象
当输入wishlist=4时,代码仅输出3次Item-%d Details,而非预期的4次。
原因分析
问题出在第二个do-while循环的逻辑上:
- 初始
itemdetails值为1 - 循环流程是先打印,再自增变量,最后判断终止条件
- 当
wishlist=4时的执行过程:- 第一次循环:打印
Item-1,itemdetails变为2,判断2≠4,继续循环 - 第二次循环:打印
Item-2,itemdetails变为3,判断3≠4,继续循环 - 第三次循环:打印
Item-3,itemdetails变为4,判断4≠4,条件不成立,循环直接终止
- 第一次循环:打印
- 最终只执行了3次打印,漏掉了
Item-4的输出
修复方案
方案一:调整循环终止条件
将循环条件改为itemdetails <= wishlist,确保当itemdetails等于wishlist时仍会执行一次打印:
do { printf("\n\nItem-%d Details:\n", itemdetails); itemdetails++; } while (itemdetails <= wishlist);
执行流程:
itemdetails=1:打印后变2,判断2<=4→继续itemdetails=2:打印后变3,判断3<=4→继续itemdetails=3:打印后变4,判断4<=4→继续itemdetails=4:打印后变5,判断5<=4→终止- 刚好完成4次打印
方案二:调整变量自增时机与初始值
把itemdetails初始值设为0,先自增再打印,循环条件改为itemdetails < wishlist:
int wishlist, itemdetails = 0; // 保留前面的输入验证循环不变 do { itemdetails++; printf("\n\nItem-%d Details:\n", itemdetails); } while (itemdetails < wishlist);
执行流程:
itemdetails=0:自增到1,打印Item-1,判断1<4→继续itemdetails=1:自增到2,打印Item-2,判断2<4→继续itemdetails=2:自增到3,打印Item-3,判断3<4→继续itemdetails=3:自增到4,打印Item-4,判断4<4→终止- 同样完成4次打印
内容的提问来源于stack exchange,提问作者Rex Hunter
相关产品推荐
相关产品推荐

