MSX BASICにおけるINPUT関数使用上の注意

(1997/4/16)
まずは下のサンプルプログラムをご覧ください。
このサンプルは、MSX BASIC(RAM 8KB 以上)、F-BASIC、N88BASICなどで実行可能です。
10  A=2480
20  PRINT  ”A=”;A
30  INPUT  ”A=”;A
40  GOTO  20
実行すると、数値型変数Aの値を出力し、その後新たにAを(キーボードから)入力するということを繰り返します(MSX BASICの場合、CTRLキーとSTOPキーを同時に押すと終了します)。

まずプログラムを実行させ、INPUT命令(30行)により「A=?」と聞かれたら、0以外の適当な「数字」を入力してみましょう。 すると当然、変数Aにはその数字が入りますね。 モニタにも入力した数字が出てくるはずです。

今度は、「A=?」と聞かれたら、何も入力せず(スペースは可)、RETURNキーのみを押してみましょう。 すると、MSX BASICなら変数Aは0とはならず、以前の値がそのまま残ってしまいます。 プログラムを実行して最初の入力要求でRETURNキーのみを押すと、モニタには「A=2480」と出力されるはずです。
このような場合、ビーバーが知っている他のBASICでは、変数Aには0が入ったと思います。
なお、サンプルのように、数値型変数入力要求時に文字を入れようとすると、「?Redo from start」と出力されて再び数値の入力を要求してきますが、この後先と同じように、何も入力せずRETURNキーのみを押すと、MSX BASICでも変数Aは0となります

文字型変数への入力についても同様です。 次のサンプルプログラムをMSX BASICで実行し、INPUT 命令(30行)により「S$=?」と聞かれたときに、何も入力せず(スペースは可)RETURNキーのみを押すと、S$はヌル文字(””)とはならずに、以前の文字列が残ります。 プログラムを実行して最初の入力要求でRETURNキーのみを押した場合、モニタには「S$=BEAVER」と出力されるはずです。 これもビーバーが知っている他のBASICでは、S$はヌル文字になったと思います。

10  S$=”BEAVER”
20  PRINT  S$
30  INPUT  ”S$=”;S$
40  GOTO  20

というわけで、MSX BASICユーザが他のBASICを使う場合(またはその逆の場合)は、INPUT命令のこうした性質の違いに気を付けた方がいいかも知れません
例えばMSX BASICでINPUT命令を使ったプログラムを他のBASICに移植する場合、それが「RETURNキーのみ押した場合は変数の内容を変更しない」という、MSX BASICのINPUT命令の性質を利用したものであれば、INPUT命令およびその前後を適当に変更してやる必要があるでしょう(ヌル文字が入力されたら変数は変更しないようにするなど)。
逆に、他のBASICのプログラムをMSX BASICに移植する場合、そのプログラムが、INPUT命令でRETURNキーのみを押したら、その変数が0(ヌル文字)になることを期待していないかどうか気を付けましょう。
MSXの適当手帳 MSX駅 西山駅