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

