C言語-インタプリタminiBASIC |
8. 命令の機能追加
(1) INPUT命令の機能追加
書式
INPUT [文字定数 {,|;}] 変数
文字定数を表示して、入力待ちになる。入力したデータは変数に格納される。[
] 内は省略することができ、省略したときは ? を表示して入力待ちになる。
文字定数と変数はカンマまたは、セミコロンで区切る。セミコロンで区切ったときは文字定数の後に
? が表示される。
書式を構文図で表すと次のようになる。
○印は終端記号(末端記号)といい、他に種類のないものを表す。□印は非終端記号といい、その種類は別に定義される。
例えば文字定数は、"で囲まれた文字の集まりであり、変数は英字26文字のいずれかである。
void mb_input(void) { 次のトークンを取得 if トークンの先頭 = '"' トークンを表示 次のトークンを取得 if トークンの先頭 = ',' 何もしない else if トークンの先頭 = ';' ? を表示 else 文法エラー 次のトークンを取得 else ? を表示 if 変数名として正しくない 変数名エラー キー入力 文字列を実数に変換して変数に格納 }
[mb_cmds2.c] | |
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: |
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "gettoken.h"
/* グローバル変数 */
extern double hensuu[26]; /* 変数用(A〜Z) */
void mb_print(void)
{
<<省 略>>
}
void mb_input(void)
{
char val; /* 変数名(番号) */
char buff[256]; /* キー入力用 */
if(*get_token() == @ ){ /* 文字定数 */
printf("%s", &token[1]); /* メッセージ表示 */
if(*get_token() == A ) /* カンマ */
; /* 何もしない */
else if(B ') /* セミコロン */
printf("? "); /* ? 追加表示 */
else{
printf("Error : INPUT文法エラー\n");
exit(1);
}
val = *get_token(); /* 変数名取得 */
}else{
val = *token; /* 変数名取得 */
printf("? "); /* ? 表示 */
}
if(C ){ /* 変数名チェック */
printf("変数名は英字のみです\n");
exit(1);
}
D ); /* キー入力 */
hensuu[E '] = atof(buff); /* 入力データを変数へ */
}
|
INPUT A INPUT "Data(No ?) = ",B INPUT "Data(Yes ?) = ";C X = (A + B) * C PRINT A PRINT B PRINT C END |
D:\Data\src>make lcc -c -o mb_cmds2.obj mb_cmds2.c lcc -o mbas.exe mbas07.obj mb_cmds2.obj gettoken.obj eval2.obj lld @link.i D:\Data\src>mbas reidai04.mb ? 12.345 Data(No ?) = 23.4567 Data(Yes ?) = ? 34.56 12.345000 23.456700 34.560000 終了します |
Copyright © 2001 Hiroshi Masuda |