• 締切済み

20マスのスゴロクをプログラミングしたいのですが、

20マスのスゴロクをプログラミングしたいのですが、 20マス丁度でないと上がれないようにしたいです。 #include<stdio.h> #include <stdlib.h> #include <time.h> main() { srand((unsigned) time(NULL)); int sai, rest=19, masu=1; while(masu != 20){ sai= rand() % 6 + 1; printf("サイコロ %d、",sai); masu +=sai; rest -=sai; if(masu<20){ printf("今のマス %2d、 ",masu); printf("残り %2d\n",rest);} else if(masu==20) { printf("上がり\n",sai);} else { printf("上がれない\n",sai);} } return(0); } ここまでは出来たのですが、うまく実行できず上がれないが無限ループしてしまいます。 どのようにしたらうまくいくでしょうか? 教えてください!

みんなの回答

回答No.2

20超える時もmasuの値を加算してるんだから、一旦20を超えたら(intのmax値を超えて負の数に転じてから再び20に近付くまで)延々とループしてしまいます。 else { printf("上がれない\n",sai); masu -= sai; rest += sai; } このように、masuの値が20を超える場合は元のmasuの値に戻しておく必要があります。

回答No.1

20でなかったらループって書いてるんだから、 printf("上がれない\n",sai); masu = 20; } と書けば20になってループを抜けます。 またはprintf("上がれない\n",sai); break; } ですね。

jtxjmdwt
質問者

お礼

回答ありがとうございます。 大変申し訳ないのですが、こちらの質問内容に不備がありました。 本当にすみませんでした。

jtxjmdwt
質問者

補足

サイコロ 3 今のマス4 残り 16 サイコロ 5 今のマス9 残り 11 サイコロ 6 今のマス15 残り 5 サイコロ 2 今のマス17 残り 3 サイコロ 4 上がれない サイコロ 6 上がれない サイコロ 3 上がり というように表示したいのですが、 私の考えたものでは サイコロ 3 今のマス4 残り 16 サイコロ 5 今のマス9 残り 11 サイコロ 6 今のマス15 残り 5 サイコロ 2 今のマス17 残り 3 サイコロ 4 上がれない サイコロ 6 上がれない サイコロ 3 上がれない サイコロ 6 上がれない のようにサイコロ3の状態で上がれず無限ループしてしまうのです

関連するQ&A