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

C++循环体不执行问题求助:优惠券兑换糖果程序故障

问题分析与修复方案

首先,咱们来拆解你遇到的问题:原代码的循环逻辑完全偏离了优惠券兑换的核心规则,这才导致循环要么不按预期执行,要么逻辑错误。

原代码的核心问题

你的do-while循环犯了两个关键错误:

  • 循环条件错误:你判断的是candyBars >=7,但兑换糖果的依据是优惠券数量,不是已经买的糖果数。哪怕你买了100个糖果,只要优惠券不够7张,也没法兑换;反过来,哪怕你只买了6个,但通过兑换攒够了7张优惠券,也能换。
  • 循环内未更新关键变量:计算完bonus和couponsLeft后,你既没有把兑换的糖果加到总数量里,也没有更新优惠券的数量(兑换的糖果会新产生bonus张优惠券,所以新的优惠券数应该是couponsLeft + bonus)。而且原循环里candyBars的值从来没改过,导致如果输入money>=7,循环会无限执行;如果输入小于7,循环执行一次就退出——完全不符合需求。

正确的实现逻辑

咱们重新梳理需求:

  1. 用money买糖果,1美元1个,得到等量的优惠券。
  2. 只要优惠券>=7,就兑换糖果:每7张换1个,同时得到1张新优惠券(来自兑换的糖果)。
  3. 重复步骤2,直到优惠券不够7张。
  4. 输出总糖果数和剩余优惠券。

修复后的代码

#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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:32:39