プレイ日記
スピーカー A7GSM51L347
このエラーが出る例を教えて下さい。 プログラムを一気に組みすぎて理解不能なので例がないと全くわかりません。
1そうだね
プレイ済み
返信[1]
親投稿
スピーカー A7GSM51L347
ENDIF足しても「何言ってんの」エラー、NEXT足しても効果なしです。
0そうだね
プレイ済み
返信[2]
親投稿
MIKI ifconfig
いやいや、エラーメッセージよく読んで。 足りないのは repeat ですよ。 千行超のプログラムをいきなり書いたんですか????
0そうだね
プレイ済み
返信[3]
親投稿
入れ子の状態を1つ1つ確認してみてはどうでしょうか。 たとえば、 REPEAT IF A THEN UNTIL B ENDIF でもそのエラーになるみたいです。
0そうだね
プレイ済み
返信[4]
親投稿
スピーカー A7GSM51L347
ええ、何故「リピートが足りない」ってなるかが分からないのです。 UNITILを2つ用意した覚えはないですし、REPEATもちゃんとある… 明日色々と試してみます。
0そうだね
プレイ済み
返信[5]
親投稿
とも magicaltom
UNTILではなくUNITIL? 1056行目付近をチェックしてみましょう。
1そうだね
プレイ済み
返信[6]
親投稿
私の場合だけかもしれませんが、命令を追加・削除するより、仕様を意識しながら、インデントを付けて入れ子の状態を明確にするのが、回り道のように思えても、安全確実かと思います。もちろん、明らかに過不足があるとわかったものは、追加・削除します。
1そうだね
プレイ済み
返信[7]
親投稿
otta777 otta777a
REPEAT 処理1 WHILE 条件1 処理2 UNTIL 条件2 処理3 WEND のようにREPEAT~UNTILの間にWHILEを記述してUNTILの後にWENDがある プログラムでもUNTIL without REPEATになります。 REPEAT~UNTILとWHILE~WENDの対応が間違いないか確認してみて下さい。
0そうだね
プレイ済み
返信[8]
親投稿
スピーカー A7GSM51L347
皆様のコメントがヒントになって解くことができました! ……疲れたぜ。 どうやら ENDIF,NEXTの「位置」がおかしかったようでした。
1そうだね
プレイ済み
返信[9]
親投稿
スピーカー A7GSM51L347
でもそれなら「UNTILがないREPEATがある」ってなる筈ではないでしょうか?仕組みがよく分かりませんね…
1そうだね
プレイ済み
返信[10]
親投稿
私の書いた例の場合、IFの後にREPEATがあって、ENDIFの後に最初のREPEATに対するUNTILがあれば正常なので、どんなメッセージを出すかはプチコンを作る人の裁量の範囲だと思います。どんな間違いかを最終的に判断するのは、プチコンでは無くプログラムを作った本人の裁量の範囲だと考えます。だれか、入れ子のチェックプログラムかプログラム整形プログラムを作ってくれないかな(他力本願^^;)
2そうだね
プレイ済み
返信[11]
親投稿
MIKI ifconfig
スピーカーさん、パーサー(構文解析プログラム)の都合です。適切なエラーメッセージ出すのって、結構難しいんですよ。 今のプチコンのクォリティは「正しいプログラムを正しく動かす」ことを目指してがんばってる段階です。「正しくないプログラムに対して適切なエラーを発生する」のはその次の段階ですね。とても重要なことなんですけど。 コータさん、文法チェッカーならてらこやさんの yacc が使えるかも。 https://miiverse.nintendo.net/posts/AYIHAAAEAABEVRTtmZcnNA バグってなければ、入れ子の対応チェックとか楽勝のはず。(もちろん、わかりやすいエラーメッセージを出すのは難しいですが)
1そうだね
プレイ済み