トピック
受付中
??? 258556

今更になって恥ずかしいんですが……DEFでエラーが発生してしまいます。

DEFは使ったことがなく、使ってみたらエラーが発生して何度も試行錯誤しても動かず行き詰まってます。画像の文はどこが間違ってますか?ちなみに[DE]はボタンの状態を取得するための変数です。
2そうだね
プレイ済み
返信[1]
親投稿
moh6an moh6an
OUTで出力が複数あるときは RETURN使えないッス
4そうだね
プレイ済み
返信[2]
親投稿
COMMONは他のスロットから呼び出すのでなければ要らないはず…。 で、RETURNでは1つの値しか返せません。そしてRETURNで値を返す場合は、OUTは必要ありません。 で、2つ以上の値を返すときは逆にRETURNを使わずにOUTを使います。この場合は、RETURNは書かずに返したい内容をOUTで指定した変数に直接入れます。 ということで、それをふまえて書き直すと、 DEF COMAND0 DE OUT DE2,DE3 IF DE==1 THEN DE2=120:DE3=148 IF DE==2 THEN DE2=120:DE3=178 END みたいになります。呼び出すときは、 COMAND0 1 OUT XS,YS みたいに書けば、DE2とDE3に入れた数は、同じ位置の変数であるXSとSYに入って返ってきます。
3そうだね
プレイ済み
返信[3]
親投稿
OUTを使う場合returnは要りません。 なので、returnの行を消して、XS,YSをDE2,DE3に変えるとうまく動くと思います。
3そうだね
プレイ済み
返信[4]
親投稿
say sayer.exe
common def command0 de out XS,YS if de==1 then xs=120:ys=148 if de==2 then xs=120:ys=178 REM return xs,ys ←←←←←この行自体いらない end これでいけるかな?
3そうだね
プレイ済み
返信[5]
親投稿
関数型のときにRETURNで戻り値を返すのです。 OUT構文の場合はDEF なんとかかんとか OUT 変数 ここに並べた変数に代入するのです。
2そうだね
プレイ済み
返信[6]
親投稿
はる HARUHI-0913
RETURN XS,YS を DE2=XS DE3=YS に変えてみて下さい。
0そうだね
プレイ済み
返信[7]
親投稿
??? 258556
たくさんの方々ご説明ありがとうございます。 ですが、これでも実行すると画像のようなエラーが発生してしまいます。『初期化されていない変数が使われた』的なことだと思いますがどうすればいいのか全くわかりません。どうすればいいんですか。
0そうだね
プレイ済み
返信[8]
親投稿
??? 258556
でんぺんさん» 今回は EXEC でスロット2で実行するので COMMON が必要になると思います。
1そうだね
プレイ済み
返信[9]
親投稿
プログラムを見ないとなんともいえませんが、OUTの後の変数は右辺になってはいけなかったはずです。
0そうだね
プレイ済み
返信[10]
親投稿
はる HARUHI-0913
多分そのエラーは変数に何も値が入ってないからだと思います。 DEが1か2以外だとそうなると思います。 DEが1か2以外の時にもXSとYSに値を入れるようにすればいいと思います。
0そうだね
プレイ済み
返信[11]
親投稿
??? 258556
全然書いてなくて恥ずかしいんですがメインプログラムです。
0そうだね
プレイ済み
返信[12]
親投稿
はる HARUHI-0913
DEが1か2以外にならないように、 15行目を、 IF B<3&&B>0&&CMOOD==0THEN CONMAND0 B OUT X,Y に変えてみて下さい。
0そうだね
プレイ済み
返信[13]
親投稿
はるさんのように引数が1か2以外の時は呼び出さないようにするか、DEFの次の行で以下のように必ず変えす値を入れるようにしてみてください。 D2=0:D3=0 そうすれば1か2以外の時は値に0が入るんでエラーにはならないんじゃないかと思います。
0そうだね
プレイ済み
返信[14]
親投稿
??? 258556
できました! 丁寧に説明してくださってありがとうございました。
0そうだね
プレイ済み