C言語-インタプリタminiBASIC |
8. 命令の機能追加
(2) PRINT命令の機能追加
書式
PRINT [{文字定数|式}] [{,|;}{文字定数|式} ...]
[ ] 内は省略することができ、省略したときは、改行するだけである。
パラメータとして文字定数または式(数値、変数、計算式)を指定するとそのデータを表示する。
パラメータはカンマまたはセミコロンで区切って複数指定することができる。カンマで区切ったときは間隔としてタブが表示される。セミコロンで区切ったときはデータが連続して表示される。
書式を構文図で表すと次のようになる。
void mb_print(void) { 永久ループ{ 次のトークン取得 if 文字定数 文字定数表示 else if 引数なし(改行) 永久ループ脱出 else /* 計算式 */ 式の結果表示 次のトークン取得 if カンマ タブ表示 else if セミコロン 何もしない else if 引数なし(改行) 永久ループ脱出 else 文法エラー } }
[mb_cmds3.c] | |
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 61: |
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include "gettoken.h" /* 関数プロトタイプ宣言 外部参照 */ extern double expression(void); /* eval.c */ /* グローバル変数 */ extern double hensuu[26]; /* 変数用(A〜Z) */ void mb_print(void) { @ { get_token(); if(A ) /* 文字定数 */ printf("%s", &token[1]); else if(B ) /* 引数なし */ break; else /* 計算式 */ printf("%f", expression()); get_token(); if(*token == ',') printf("\t"); /* TAB 表示 */ else if(*token == ';') ; /* 何もしない */ else if(B ) break; else{ printf("Error : PRINT 文法エラー\n"); exit(1); } } printf("\n"); } void mb_input(void) { <<省 略>> } |
INPUT A INPUT "Data(No ?) = ",B INPUT "Data(Yes ?) = ";C X = (A + B) * C PRINT A PRINT A,B;C PRINT "Answer = ";C END |
D:\Data\src>make lcc -c -o mb_cmds3.obj mb_cmds3.c lcc -o mbas.exe mbas07.obj mb_cmds3.obj gettoken.obj eval.obj lld @link.i D:\Data\src>mbas reidai05.mb ? 12.345 Data(No ?) = 23.4567 Data(Yes ?) = ? 34.56 12.345000 12.345000 23.45670034.560000 Answer = 34.560000 終了します |
23.45670034.560000
変数BとCがセミコロンで区切られているので、変数BとCの値が連続して表示されている。
Copyright © 2001 Hiroshi Masuda |