・だめな理由その1
提示されたスクリプトでは「数式」は文字列変数ではないように見受けられます。
文字列変数を使わないと入力ボックスに「+」「-」「*」「/」を入力できません。
・だめな理由その2
数式の入った文字列を整数および実数に変換しても計算結果は得られない。
double("1+2+3.4")の結果は数字ではない「+」とそれ以降の文字列は無視されるので、先頭の「1」しか処理されず「1.0」になります。
・解決策
文字列として数式を受け取り文字の種類を判別しながら数式を処理する。
整数の足し算と引き算だけのプログラムを作ってみたので参考にしてみてください。
多バイト文字が数式に入っていた場合の挙動は検証してないです。
notesel que ;数式の変数
cur = 0 ;if文で使う変数
memo = "" ;一時的に数字を文字列の状態で入れる変数
input que,260,30
button goto "Go",*go
stop
*keisan
;実際に計算する部分
logmes "calc ans="+ans+" memo="+memo+" mode="+mode
switch mode
case 0
ans = ans + int( memo )
memo = ""
swbreak
case 1
ans = ans - int( memo )
memo = ""
swend
return
*go
;文字の判定と計算のループ
ans = 0 ;答え変数
mode = 0 ;*keisanルーチンの為の変数
repeat notesize
cur = peek(que,cnt)
if( cur >= '0' & cur <= '9' ){
;数字の場合
memo = memo + strmid(que,cnt,1)
}else:if( cur == '+'){
;「+」の場合
gosub *keisan
mode = 0
}else:if( cur == '-'){
;「-」の場合
gosub *keisan
mode = 1
}
loop
gosub *keisan
mes ans
stop