C++ for循环计数超出限制:骰子组合计算出现非法7值问题
问题排查结果
核心问题是你在循环作用域外访问了迭代变量,此时迭代变量已经超出了你预设的1~6取值范围,具体原因如下:
- C++中for循环的执行逻辑为:先执行初始化语句,之后每次循环先判断条件是否成立,成立则执行循环体,执行完成后运行迭代语句(如
k3++),再次判断条件。你设置k3的循环条件为k3<=6,当k3自增到7时条件不成立,退出最内层循环,此时k3的实际值为7。 - 你在
k3的循环结束后,额外在k2循环体内、k1循环体内各写了一处判断和输出逻辑,这两个位置的k3已经是超出有效范围的7;同理当k2循环完全退出时,k2也会自增到7,就会出现2-7-7这类无效输出。
修正方案
删除k3循环外的两处多余判断逻辑即可,修正后代码如下:
for (k1 = 1; k1 <= 6; k1++) //k1 - die 1 { for (k2 = 1; k2 <= 6; k2++) //k2 - die 2 { for (k3 = 1; k3 <= 6; k3++) //k3 - die 3 { if (k1+k2+k3 == z) //z - sum cout<<k1<<"-"<<k2<<"-"<<k3<<endl; } } }
验证结果
以z=16为例,修正后正确的有效输出为:
4-6-6 5-5-6 5-6-5 6-4-6 6-5-5 6-6-4
所有输出的骰子取值都在1~6范围内,符合需求。
内容的提问来源于stack exchange,提问作者Mislo_
相关产品推荐
相关产品推荐

