无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 2937|回复: 16
打印 上一主题 下一主题

PECMD 的CALC遇到怪事,高手进

[复制链接]
跳转到指定楼层
1#
发表于 2008-10-18 09:36:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不多说,

\\ START
_SUB SHELL,W180H220,请勾选,,,
LABE LB1,L5T5W150H17,请勾选
CHEK NUMA,L5T40W70H20,数字  1,call ReadCheck,1
CHEK NUMB,L5T65W70H20,数字  2,call ReadCheck,1
CHEK NUMC,L5T90W70H20,数字  4,call ReadCheck,1
CHEK NUMD,L75T40W70H20,数字  8,call ReadCheck,1
CHEK NUME,L75T65W70H20,数字 16,call ReadCheck,1
ITEM BT1,L15T120W60H18,应用,MESS %CK1% + %CK2%=%BN% \n  %BN% + %CK3% =%BNT% \n %BNT% + %CK4% =%BNTP% \n%BNTP% + %CK5% =%BNTPO% @CALC #OK
CALL ReadCheck
PBAR Pbar1,L5T175W150H10,0
_END
_SUB ReadCheck
  FIND $%NUMA.Check%=1,ENVI CK1=1!ENVI CK1=0
  FIND $%NUMB.Check%=1,ENVI CK2=2!ENVI CK2=0
  FIND $%NUMC.Check%=1,ENVI CK3=4!ENVI CK3=0
  FIND $%NUMD.Check%=1,ENVI CK4=8!ENVI CK4=0
  FIND $%NUME.Check%=1,ENVI CK5=16!ENVI CK5=0
  CALC BN=%CK1% + %CK2%
  CALC BNT=%BN% + %CK3%
  CALC BNTP=%BNT% + %CK4%
  CALC BNTPO=%BNTP% +%CK5%
_END

CALL @SHELL

\\ END

用PECMD Load num.ini 后,弹出窗口,不要去勾任何东西。直接点按钮。第一行算错 0 + 0 =5

大家帮忙看看有哪里写错?
PECMD为最新版本,Windows XP SP3,XP SP2 PE都有这个问题?
2#
发表于 2008-10-18 12:06:32 | 只看该作者
估计是PECMD的BUG吧,0+0=5,直接试也如此。
回复

使用道具 举报

3#
发表于 2008-10-18 12:38:20 | 只看该作者
原帖由 junyee 于 2008-10-18 09:36 发表
\\ START
_SUB SHELL,W180H220,请勾选,,,
  LABE LB1,L5T5W150H17,请勾选
  CHEK NUMA,L5T40W70H20,数字  1,call ReadCheck,1
  CHEK NUMB,L5T65W70H20,数字  2,call ReadCheck,1
  CHEK NUMC,L5T90W70H20,数字  4,call ReadCheck,1
  CHEK NUMD,L75T40W70H20,数字  8,call ReadCheck,1
  CHEK NUME,L75T65W70H20,数字 16,call ReadCheck,1
  ITEM BT1,L15T120W60H18,应用,MESS %CK1% + %CK2%=%BN% \n  %BN% + %CK3% =%BNT% \n %BNT% + %CK4% =%BNTP% \n%BNTP% + %CK5% =%BNTPO% @CALC #OK
  CALL ReadCheck
PBAR Pbar1,L5T175W150H10,0
_END
_SUB ReadCheck
  FIND $%NUMA.Check%=1,ENVI CK1=1!ENVI CK1=0
  FIND $%NUMB.Check%=1,ENVI CK2=2!ENVI CK2=0
  FIND $%NUMC.Check%=1,ENVI CK3=4!ENVI CK3=0
  FIND $%NUMD.Check%=1,ENVI CK4=8!ENVI CK4=0
  FIND $%NUME.Check%=1,ENVI CK5=16!ENVI CK5=0
  CALC BN=%CK1% + %CK2%
  CALC BNT=%BN% + %CK3%
  CALC BNTP=%BNT% + %CK4%
  CALC BNTPO=%BNTP% +%CK5%
_END
CALL @SHELL
\\ END

1、_SUB 是定义窗口命令,在 _SUB 与其匹配的 _END 命令之间,窗口及其控件还没生成,所有与窗口及其控件的变量均未初始化,
    所以上面红色一行 CALL ReadCheck 实际没有意义(NUMx.Check 均未初始化,int 类型可能为0,double 类型不确定)。
2、CALC 命令有前导符"#",可以指定数据按何种类型来处理,你上面的所有数据均应按 int 类型数据处理。
3、行首注释符应是"/"不是"\",你用错了,虽不影响使用。

修改如下,去掉 _SUB 与 _END 之间的 CALL ReadCheck ,数值变量按 int 类型处理,在 CALL 窗口之前将变量初始化:
_SUB InitVarule
  TEAM ENVI CK1=1|ENVI CK2=1|ENVI CK3=1| ENVI CK4=1|ENVI CK5=1
  CALC #BN=%CK1% + %CK2%
  CALC
#BNT=%BN% + %CK3%
  CALC
#BNTP=%BNT% + %CK4%
  CALC
#BNTPO=%BNTP% +%CK5%
_END


_SUB DoBT1
  MESS %CK1%+%CK2%=%BN%\n%BN%+%CK3%=%BNT%\n%BNT%+%CK4%=%BNTP%\n%BNTP%+%CK5%=%BNTPO%@CALC #OK
_END


_SUB SHELL,W180H220,请勾选,,,
  LABE LB1,L5T5W150H17,请勾选
  CHEK NUMA,L5T40W70H20,数字  1,call ReadCheck,1
  CHEK NUMB,L5T65W70H20,数字  2,call ReadCheck,1
  CHEK NUMC,L5T90W70H20,数字  4,call ReadCheck,1
  CHEK NUMD,L75T40W70H20,数字  8,call ReadCheck,1
  CHEK NUME,L75T65W70H20,数字 16,call ReadCheck,1
  ITEM BT1,L15T120W60H18,应用,CALL DoBT1
  PBAR Pbar1,L5T175W150H10,0
_END

_SUB ReadCheck
  FIND $%NUMA.Check%=1,ENVI CK1=1!ENVI CK1=0
  FIND $%NUMB.Check%=1,ENVI CK2=2!ENVI CK2=0
  FIND $%NUMC.Check%=1,ENVI CK3=4!ENVI CK3=0
  FIND $%NUMD.Check%=1,ENVI CK4=8!ENVI CK4=0
  FIND $%NUME.Check%=1,ENVI CK5=16!ENVI CK5=0
  CALC #BN=%CK1% + %CK2%
  CALC #BNT=%BN% + %CK3%
  CALC #BNTP=%BNT% + %CK4%
  CALC #BNTPO=%BNTP% +%CK5%
_END

CALL InitVarule
CALL @SHELL

[ 本帖最后由 lxl1638 于 2008-10-18 13:17 编辑 ]
回复

使用道具 举报

4#
发表于 2008-10-18 12:59:49 | 只看该作者
用 # 表示 数值 运算
回复

使用道具 举报

5#
发表于 2008-10-18 13:12:58 | 只看该作者
原帖由 dos时代菜鸟 于 2008-10-18 12:59 发表
用 # 表示 数值 运算


int 类型整数运算:
CALC #变量=%变量1% 运算符 %变量2%

double 类型运算:
CALC 变量=%变量1% 运算符 %变量2%

字符串运算(连接):
ENVI 变量=%变量1%%变量2%
回复

使用道具 举报

6#
发表于 2008-10-18 15:01:58 | 只看该作者
DOUBLE类型是什么东西?
回复

使用道具 举报

7#
发表于 2008-10-18 15:09:21 | 只看该作者
原帖由 yichya 于 2008-10-18 15:01 发表
DOUBLE类型是什么东西?


双精度。。。。。。。
回复

使用道具 举报

8#
发表于 2008-10-18 15:10:25 | 只看该作者
老九一天够辛苦啊。大家为他的勤劳致敬。。
回复

使用道具 举报

9#
发表于 2008-10-18 15:10:27 | 只看该作者
原帖由 mapeimapei 于 2008-10-18 15:09 发表


双精度。。。。。。。

还是不明白。。。。。。。
回复

使用道具 举报

10#
发表于 2008-10-18 15:17:25 | 只看该作者
百度&&google>>double双精度
回复

使用道具 举报

11#
发表于 2008-10-18 15:23:10 | 只看该作者
在网上大致浏览了一下,大概就是在VB里的Dim xx As Long吧!
这个东西为什么会导致0+0=5这种问题产生呢?

[ 本帖最后由 yichya 于 2008-10-18 15:25 编辑 ]
回复

使用道具 举报

12#
发表于 2008-10-18 15:29:39 | 只看该作者
一个没有初始化的变量,其值可能是不确定的。
如果定义一个变量(不管什么类型变量)以后不对其初始化赋值,读取其地址的首位往往不是0。

上面本人修改过的脚本可以完全达到楼主的要求了,CALC 命令在这个问题上没有BUG,只是功能很有限,无法完成表达式计算。

[ 本帖最后由 lxl1638 于 2008-10-18 15:35 编辑 ]
回复

使用道具 举报

13#
发表于 2008-10-18 15:37:40 | 只看该作者
原帖由 lxl1638 于 2008-10-18 15:29 发表
一个没有初始化的变量,其值可能是不确定的。
如果定义一个变量(不管什么类型变量)以后不对其初始化赋值,读取其地址的首位往往不是0。



没有初始化变量的,程序会读取内存中那个位置以前存储的数值。。

会出现很多问题的,如:负值。。


回复

使用道具 举报

14#
发表于 2008-10-18 15:44:51 | 只看该作者
整数有关数据     

   类型                  比特(位)数              取值范围

[signed] int                  16                 -32768~~~32767

Unsigned int                16                  0~~~65535

[signed] short int         16                 -32768~~~32767

Unsigned short int         16                 0~~~65535

long [int]                     32                 -2147483648~~~21474833647

Unsigned long [int]        32                 0~~~4294967295


                浮点型数据
类型                  比特(位)数           有效数据            取值范围 (注:括号中为次方)

float                        32                     6~~~7           -3.4*10*(-38)~~~3.4*10*(38)  
doudle                     64                   15~~~16          -1.7*10*(-308)~~~~1.7*10*(308)
long doudle              128                  18~~~19         -1.2*10*(-4932)~~~1.2*10*(-4932)



[ 本帖最后由 mapeimapei 于 2008-10-18 17:00 编辑 ]
回复

使用道具 举报

15#
发表于 2008-10-18 15:45:57 | 只看该作者
没怎么学过programming,所以依然不懂……等以后系统的学习C编程的时候再来请教!
回复

使用道具 举报

16#
 楼主| 发表于 2008-10-18 16:25:47 | 只看该作者
啊,劳驾老九了……

顿时明白!
回复

使用道具 举报

17#
发表于 2008-10-18 17:01:37 | 只看该作者
回宿舍专门找了C语言书,,呵呵。。需要请浏览14楼。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-3 03:32

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表