HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0830
質問者repeart loop の中の button5解決


質問者

リンク

2015/8/30(Sun) 16:21:14|NO.71130


;ボタンを押した回数を表示したい repeat 5 cls mes cnt button "次",*a stop *a loop end

実行すると「repeat外でのloopは無効」と出るのですが
詳しく説明をお願いします。また、改善したスクリプトをお願いします。



この記事に返信する


質問者

リンク

2015/8/30(Sun) 16:24:02|NO.71131

repeatでした



kanamaru

リンク

2015/8/30(Sun) 17:23:46|NO.71133

詳しく説明するほどのものではないと思います。
repeatとloopは命令ですが、ほかの言語では式という分類に入ります。
ifやwhichも同様です。
そのため、セットで使う必要があります。
しかし、提示されたのを見ると、間にstopがあり、そこで処理が停止しているようです。
hspのような言語は、一行一行上から見てプログラムを解釈します。
stopがループの中に条件とか与えずにあると、条件なく停止と解釈され、
loopはコンパイルの対象にならないと推測されます。
そのため、コンパイラはloopがないと考えたと思われます。
改善方法としては、gosubを使えばいいと思います。
改善したプログラムを要求しているようですが、
そこまで難しいものではないので、これで説明を終わりにします。
ヒントを言うと、ループは使いません。
結局詳しく説明してしまいました。
頑張ってください。



kanamaru

リンク

2015/8/30(Sun) 17:42:40|NO.71134

よく考えたらgosubは使いません。
button命令のヘルプをよく見て、頑張ってください。
もう一つヒントを言うと、ボタンを押した回数を表示とありますが、
ボタンを押したら押した回数に1足して表示し直すと言いかえて見てください。



レノス

リンク

2015/8/30(Sun) 18:24:58|NO.71138

そのスクリプトが失敗する理由は、
button でジャンプしたときに、
自動的にループから取り除かれてしまうためです。


// looplev は「いま何個の repeat の内側にあるか」を示す数値 repeat 1 button "ボタン", *a mes "ループの深さ: " + looplev //→ 1 stop loop *a mes "ループの深さ: " + looplev //→ 0 stop

改善方法:
ボタンの押された回数は変数で記憶しましょう。

> stopがループの中に条件とか与えずにあると、条件なく停止と解釈され、
> loopはコンパイルの対象にならないと推測されます。
> そのため、コンパイラはloopがないと考えたと思われます。
いいえ、stop が途中にあっても repeat-loop の対応を正しく認識します。



質問者

リンク

2015/8/30(Sun) 18:40:40|NO.71139

回答ありがとうございました



ONION software Copyright 1997-2021(c) All rights reserved.