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

C++ while循环可持续输入但无执行动作的问题排查

优惠券兑换巧克力的逻辑问题排查

问题描述

预期实现逻辑:22美元可购买22块巧克力,获得22张优惠券;用18张优惠券兑换3块巧克力(累计25块),同时得到3张新优惠券(剩余优惠券总数为22-18+3=7);再用6张兑换1块巧克力(累计26块),剩余7-6+1=2张优惠券,最终结果应为26块巧克力、2张优惠券。

当前问题:程序运行时,while循环陷入死循环,表现为持续无响应,无法输出最终结果。用户怀疑问题出在couponsUsed的计算语句处。

原代码

#include <iosteam>

int main(){
int money, coupons, chocolate, ogCoupons, newChocolate, couponsUsed;

std :: cout << "How many chocolate bars do you want to buy? " << std :: endl;
std :: cin >> money;

coupons = money;
chocolate = money;
ogCoupons = coupons;

std :: cout << "
You got " << coupons << " coupons." << std :: endl;


while(coupons >= 6)
    {
        coupons -= 6;
        couponsUsed = (ogCoupons - coupons); //I think problem lies here
        chocolate++;
        newChocolate = couponsUsed;
        coupons += newChocolate;
        ogCoupons = coupons;
    } 

std :: cout << "
You have " << coupons << " coupons left and " <<  chocolate << " chocolate bars." << std :: endl;

return 0;
}

问题分析

  1. 头文件拼写错误:#include <iosteam> 应为 #include <iostream>,这会直接导致编译失败,若程序能运行则说明此处是输入笔误。
  2. 死循环核心原因:
    第一次循环时,coupons初始值为22,执行coupons -=6后变为16;随后couponsUsed = ogCoupons - coupons(ogCoupons初始值为22),计算得22-16=6;接着coupons += newChocolate(即加6),coupons又变回22。循环条件coupons >=6永远成立,导致程序陷入死循环,无任何后续输出。
  3. 逻辑误解:原代码错误地将消耗的优惠券数量当作兑换得到的新优惠券,实际兑换1块巧克力仅能获得1张新优惠券,而非消耗的优惠券数量。

修复后的代码

#include <iostream>

int main(){
    int money, coupons, chocolate;

    std::cout << "How many chocolate bars do you want to buy? " << std::endl;
    std::cin >> money;

    coupons = money;
    chocolate = money;

    std::cout << "\nYou got " << coupons << " coupons." << std::endl;

    while(coupons >= 6)
    {
        // 计算当前可兑换的巧克力数量
        int exchange_count = coupons / 6;
        // 累计巧克力总数
        chocolate += exchange_count;
        // 兑换后剩余的优惠券 + 新获得的优惠券(每换1块得1张)
        coupons = coupons % 6 + exchange_count;
    } 

    std::cout << "\nYou have " << coupons << " coupons left and " << chocolate << " chocolate bars." << std::endl;

    return 0;
}

修复说明

  • 移除了冗余变量(ogCoupons、newChocolate、couponsUsed),简化逻辑结构
  • 正确计算每次可兑换的巧克力数量:利用整数除法coupons / 6自动取整得到可兑换数
  • 正确更新优惠券数量:兑换后剩余的优惠券(coupons %6)加上兑换得到的新优惠券(即兑换的巧克力数量)
  • 修正了头文件拼写错误,确保编译正常

内容的提问来源于stack exchange,提问作者Tristan Gallardo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:15:32