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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
1209
Mitumitu2016_Vitaループのネストが深すぎる (え?)4解決


Mitumitu2016_Vita

リンク

2016/12/9(Fri) 19:40:42|NO.77521

今、MitumituTimer21を作ってるんですけど
(ネタバレ)
ソースコード

clr1c=255 clr1p=300 ver="1.0.1 β1 Apple" screen 0,750,520 width 720,520 font "MS UI Gothic", 14, 1 objmode 2 objsize 150 pos 0,26 listbox a, 52, "タイトル\n時計\nストップウォッチ\nタイマー" repeat redraw 0 color 255,255,255 boxf title "MituT21 [Ver:"+ver+"] color 0,0,0 boxf 0,0,750,25 color 255,255,255 font "Yu gothic UI",20,2 pos 0,-5 mes "Mitu Factory " pos 120,-4 font "Yu gothic UI",20 mes "MituT21" pos 610,-1 font "メイリオ",20 Titletime= strf("%02d",gettime(4)) +":"+ strf("%02d",gettime(5)) +":"+ strf("%02d",gettime(6)) +"."+ strf("%03d",gettime(7)) mes Titletime pos 300,100 color clr1c,clr1c,clr1c font "Yu gothic UI",50 mes "ようこそ" clr1c-3 if clr1c<=0 :clr1c=0 pos 250,200 font "Yu gothic UI",20 mes "Mitu Factory - Mitumitu2016" pos 254,230 mes "MituT21 (MitumituTimer21)" pos 210,260 mes {"Last Update ""}+ver+{"" 16/12/09"} if a=1 or a=2 or a=3 :break await 20 redraw 1 loop if a=1:goto *a1time stop *a1time clrobj font "MS UI Gothic", 14, 1 objmode 2 objsize 150 pos 0,26 listbox a, 52, "タイトル\n時計\nストップウォッチ\nタイマー" repeat redraw 0 color 255,255,255 boxf title "MituT21 [Ver:"+ver+"] color 0,0,0 boxf 0,0,750,25 color 255,255,255 font "Yu gothic UI",20,2 pos 0,-5 mes "Mitu Factory " pos 120,-4 font "Yu gothic UI",20 mes "MituT21" pos 610,-1 font "メイリオ",20 Titletime= strf("%02d",gettime(4)) +":"+ strf("%02d",gettime(5)) +":"+ strf("%02d",gettime(6)) +"."+ strf("%03d",gettime(7)) mes Titletime if a=1 :goto *a1time await 20 redraw 1 loop
リストボックスの変数が変わって、別のラベルに移動するときに、

[#Error 9 subroutineやloopのネストが深すぎます]
と出てきてしまいます。
どうすれば改善できるのでしょうか。
ご指摘よろしければお願いします。



この記事に返信する


スペース

リンク

2016/12/9(Fri) 21:09:48|NO.77524

実行してませんが、
*a1timeのループの中に「if a=1 :goto *a1time」があるのはおかしいのでは?



GENKI

リンク

2016/12/9(Fri) 23:09:42|NO.77530

> *a1timeのループの中に「if a=1 :goto *a1time」があるのはおかしいのでは?

ただおかしいことを指摘されても何がおかしいのか分かってないと思います。

まずはこちらをご一読ください。
「HSP3 プログラミング・マニュアル 3.13.繰り返し命令」
プログラミング・マニュアルはHSPスクリプトエディタのヘルプから開けます。

次にこちらにも目を通しておいてください。
ページ内全部読む必要はありません。とりあえず下記の項目だけに目を通してください。

HSPWiKi
HSP3のFAQ:エラーメッセージの意味と対処法が分からない
9 "サブルーチンやループのネストが深すぎます"
http://quasiquote.org/hspwiki/HSP3%E3%81%AEFAQ%3a%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AE%E6%84%8F%E5%91%B3%E3%81%A8%E5%AF%BE%E5%87%A6%E6%B3%95%E3%81%8C%E5%88%86%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84#H-18ahz0y

ネスト(Nest) - HSPWiKi
http://quasiquote.org/hspwiki/HSP%E7%94%A8%E8%AA%9E%E8%BE%9E%E5%85%B8#H-uk4oy4


ということで、
repeat〜loopは入れ子にすることが出来ますが、数に条件があります。
その数をネストと言い、実行しながらHSPが内部でカウントしています。
カウントが上限に達するとHSPはエラー9を吐き出します。
このカウントは、repeat〜loopを指定回数実行し終えるか、repeat〜loopをbreakで抜けるかしない限り、見かけ上ループの外を実行していてもHSPはまだループの中にいるつもりでネストの階層をカウントし続けます。
つまりrepeat〜loop内からgotoで見かけ上外に出ても、HSPはまだループの最中のつもりでネストをカウントし続けます。これの繰り返しが今回のエラーにつながっているのではないかとスペースさんは言っているわけです。



Yuuki

リンク

2016/12/9(Fri) 23:18:30|NO.77531

if a=1 :goto *a1time を if a=1 :breakにしてみてください。



Mitumitu2016

リンク

2017/1/1(Sun) 16:26:48|NO.77794

見落としです。ごめんなさい。
ご指摘してくれた方、誠にありがとうございます。



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