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时,没有对应的结算逻辑,程序会不断重新掷骰直到触发前两类判断条件,才会输出结算提示。
修复方案
- 删除循环末尾无意义的
flag=$temp语句,保证用户输入的重试选择可以正常控制循环启停。 - 补充其他点数和的结算分支,匹配你给出的预期输出逻辑:首次掷骰只要不是赢的情况直接判定为负。
- 可选:如果要完全匹配预期输出,可删掉打印点数和的
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
相关产品推荐
相关产品推荐

