C++循环体不执行问题求助:优惠券兑换糖果程序故障
问题分析与修复方案
首先,咱们来拆解你遇到的问题:原代码的循环逻辑完全偏离了优惠券兑换的核心规则,这才导致循环要么不按预期执行,要么逻辑错误。
原代码的核心问题
你的do-while循环犯了两个关键错误:
- 循环条件错误:你判断的是
candyBars >=7,但兑换糖果的依据是优惠券数量,不是已经买的糖果数。哪怕你买了100个糖果,只要优惠券不够7张,也没法兑换;反过来,哪怕你只买了6个,但通过兑换攒够了7张优惠券,也能换。 - 循环内未更新关键变量:计算完
bonus和couponsLeft后,你既没有把兑换的糖果加到总数量里,也没有更新优惠券的数量(兑换的糖果会新产生bonus张优惠券,所以新的优惠券数应该是couponsLeft + bonus)。而且原循环里candyBars的值从来没改过,导致如果输入money>=7,循环会无限执行;如果输入小于7,循环执行一次就退出——完全不符合需求。
正确的实现逻辑
咱们重新梳理需求:
- 用money买糖果,1美元1个,得到等量的优惠券。
- 只要优惠券>=7,就兑换糖果:每7张换1个,同时得到1张新优惠券(来自兑换的糖果)。
- 重复步骤2,直到优惠券不够7张。
- 输出总糖果数和剩余优惠券。
修复后的代码
#include <iostream> using namespace std; int main() { int totalCandy, money, coupons; cout << "How much money do you have? "; cin >> money; // 初始购买的糖果数和优惠券数 totalCandy = money; coupons = totalCandy; // 循环兑换:只要优惠券够7张就继续 while (coupons >= 7) { int bonus = coupons / 7; // 能兑换的糖果数 int couponsLeft = coupons % 7; // 兑换后剩下的优惠券 totalCandy += bonus; // 累加兑换的糖果 coupons = couponsLeft + bonus; // 更新优惠券:剩下的 + 新兑换糖果的优惠券 } cout << "You can get " << totalCandy << " candies, and you will have " << coupons << " coupons left over." << endl; system("Pause"); return 0; }
代码解释
- 我们用
totalCandy记录最终能得到的总糖果数,初始值就是用money买的数量。 - 循环条件改为
coupons >=7,这才符合“优惠券够兑换就继续”的规则。 - 每次循环里,我们把兑换的糖果加到
totalCandy,同时更新优惠券数量:兑换后剩下的优惠券,加上新兑换糖果附赠的优惠券(每兑换1个就有1张)。 - 当优惠券不足7张时,循环退出,输出结果。
关于你修改后的代码
你修改后的代码把初始化放到了循环里,而且循环条件是money !=000(其实就是money !=0),这变成了一个重复输入金额的循环,完全偏离了原本的优惠券兑换需求,所以肯定没法解决问题哦。
内容的提问来源于stack exchange,提问作者Brad
相关产品推荐
相关产品推荐

