パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)

キーボードから入力 その2

--------------------------------------------------------------------------------------------
キーボードからの入力については、ごく初歩的なことはBASIC超基本1で、いろんな小技はキーボードから入力で、
INPによるリアルタイムキースキャンは、リアルタイムキースキャンで説明しました。ここでは、それらから落ちこぼれ
たマイナーなことがらや、重箱の隅をつつくような仕様について、書いておきます。
--------------------------------------------------------------------------------------------

1 プロンプトメッセージ
データの入力を要求するときに、どんなデータをを入力したらよいのか、その入力形式をプロンプトメッセージ
で表示してあげるのが親切です。

INPUT "名前を入力して下さい。姓と名前の間は空白を入れて下さい"; n$

INPUT "好きな整数値を入力して下さい(1〜6まで)"; r

のように、データの入力形式を指定する。


2 入力されたデータ範囲のチェック
不正なデータが入力された時に、その入力値をはじいたり、再入力をするようにしておく。

例えば上記の名前の例で、空文字が入力されたら(リターンキーだけおされた)再入力するようにする。
10 INPUT "名前を入力して下さい。姓と名前の間は空白を入れて下さい"; n$
20 IF n$="" THEN GOTO 10


好きな数値を入れさせる例で1〜6(整数)以外が入力された場合は、再入力させる例。
N88-Basic(エミュレータ上)

(画像1)

ゲーム終了時に良く使うパターンですが、もう一度ゲームをやるかどうか確認する時のコード。
Y,y,N,n 以外の入力は、再入力させる。

10 a$=input$(1)
20 if a$="Y" or a$="y" then goto 100  
30 if a$="N" or a$="n" then goto 200
40 goto 10
100 print "Contine":goto 10
200 print "end": end



3 小文字と大文字どちらの入力も受け付けるようにする

上記のゲーム終了時のパターンで、ユーザは大文字で入力してくるか小文字で入力してくるのか
わからない。上記のように大文字でも小文字でもOKにしておくのが親切。


4 ?を出さない
INPUT文は実行されると画面に?を出力して入力待ちになります。しかし?を出したくないときもあります。
その場合、プロンプトメッセージの後をコンマ(,)にします。

10 INPUT "好きな整数値を入力して下さい(1〜6まで)", r


5 複数データの入力
一挙に名前と年齢を入力させるなど、複数データの入力をさせる時は、変数をコンマで区切ります。

10 INPUT "名前と年齢を入力して下さい"; n$, age

入力データもコンマで区切って入力します。
ただし、複数データの入力は入力ミスのもとになる(コンマで区切るのを忘れたり、入力するデータの個数
が違うなど)のであまりおすすめしません。


以下のように2つのデータ(A$, B$)の入力をさせる時に、1つしかデータが入力されないと、
?Redo from start (最初からやり直し)
とBASICのシステムから怒られます。

N-88Basic(エミュレータ上)



6 文字列の前後の空白の入力
N88Basic、F-Basicでは、文字列の前後にある空白は入力されません。前後の空白も入力したい時は、
"で文字列を囲む必要があります。"は入力されません。


(N88-Basic PC-98エミュレータ  T98-Next)



ただしN88互換Basisc for winでは、"まで入力されてしまうようです。



文字列の途中にある空白はそのまま入力されます。F-Basicの例(エミュレータXM7上)



以下のプログラムで試してみると、文字列の前後の空白はカットされていることがわかります。
文字列の前後の空白まで取り込みたい時は、" "で文字列を囲います。
F-Basic(エミュレータXM7上)



最初の実行例では、文字列の前後の空白はカットされています。
2つめの実行例は" "で囲っているので、Hello my Worldの前後の空白まで取り込んでいます。
F-Basic(エミュレータXM7上)



(参考)C言語の標準入力であるscanfは、空白を区切りとして認識するので、
Hello my World
と入力すると、HelloとmyとWorldの3つの文字に分解されて取り込まれます。
参照⇒標準入力scanfの使用上の注意点



7 INPUT WAIT
入力待ち時間に制限をつけたのが INPUT WAIT です。
INPUT WAIT 100, "名前"; N$
のようにINPUT WAITの後に[待ち時間]を指定します。
[待ち時間]で指定された時間だけキーボードからの入力を待ち、時間内に入力がないと次の行に
実行が移ります。その他の機能は、通常のINPUTと同じです。
N88BASICでは待ち時間の単位は0.1秒です。F-BASICやN88互換BASIC for win にはこの
命令はありません。



TOP PAGE >Basic活用研究目次