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

Bash编写Craps双骰游戏出现异常循环,该如何排查修复?

Bash版Craps双骰赌博游戏异常循环问题排查与修复

问题根因

  • 强制覆盖循环控制变量:代码中两个判断分支内通过read flag读取到用户输入的重试选择后,循环末尾的flag=$temp会直接将flag重置为初始值1,导致while [ $flag -le 1 ]的判断条件永远成立,程序无法正常退出循环。
  • 缺失首次掷骰结果处理分支:你当前的预期逻辑是首次掷骰直接结算,但原代码仅处理了和为2/3/12(输)、7/11(赢)的情况,当掷出和为4/5/6/8/9/10时,没有对应的结算逻辑,程序会不断重新掷骰直到触发前两类判断条件,才会输出结算提示。

修复方案

  1. 删除循环末尾无意义的flag=$temp语句,保证用户输入的重试选择可以正常控制循环启停。
  2. 补充其他点数和的结算分支,匹配你给出的预期输出逻辑:首次掷骰只要不是赢的情况直接判定为负。
  3. 可选:如果要完全匹配预期输出,可删掉打印点数和的echo "So that brings us to a total of: $sum"语句。

修复后完整代码

echo "Welcome to the craps machine"
echo  "I'm going to pick two numbers, if the sum of those numbers equals 2, 3, or 12...you lose"

flag=1

while [ $flag -le 1 ]
do
  number_1=$((RANDOM % 6 + 1))
  number_2=$((RANDOM % 6 + 1))
  echo "hmm, I think I'll go with $number_1 and $number_2"
  sum=$((number_1 + number_2))
  # 如需匹配预期输出可注释掉下一行
  # echo "So that brings us to a total of: $sum"

  if [ "$sum" -eq 2 ] || [ "$sum" -eq 3 ] || [ "$sum" -eq 12 ];then
    echo "ya lost, bud"
    echo "want to try again?"
    read flag
  elif [ "$sum" -eq 7 ] || [ "$sum" -eq 11 ];then
    echo "Youre a winner, champ"
    echo "you want to play again?"
    read flag
  else
    # 补充其他点数和的结算逻辑,匹配预期输出
    echo "ya lost, bud"
    echo "want to try again?"
    read flag
  fi
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 05:51:00