GUST NOTCH? DIARY

INPUT と LINPUT

こんなプログラムを考えます。


@Q
INPUT "VALUE ?";A$
IF A$=="" THEN GOSUB @MSG:GOTO @Q
PRINT "STRING=";A$
B=VAL(A$)
PRINT "VALUE=";B
END
@MSG
PRINT "PLEASE INPUT VALUE!"
RETURN
意図したい動作は、入力が空の場合は @MSG 以後の説明を出して入力に戻る、というものです。しかしこれをプチコンで実行したとき、ただリターンキーを押すと "?Redo from start" というメッセージが表示されて、再度 INPUT の入力待ちになります。つまり @MSG 以後の処理には行きません。
twitter でつぶやいたら教えていただいたのですが、代わりに LINPUT *1を使うと意図した動作になります。
しかし、LINPUT は文字列しか受け付けませんので、数値に変換するには VAL() 関数*2が必要になります。
この VAL() 関数の面白いところは、文字列が数字以外で始まっている場合は0に、もし数字から始まっている場合はその他の文字が入っていても数字部分だけを数値化してくれる点です。
PRINT VAL("123ABC") の結果は数値としての123となります。