SET EXACT命令的使用
set talk off
clear
do while .t.
text
1.**
11.***
endtext
acce'请输入选择编号……'toa
do case
case a='1'
do 完成选择项**的子程序
wait
case a='11'
do 完成选择项***的子程序
wait
endcase
enddo
当运行这个菜单程序时,若想执行选择项***的功能,当屏幕上出现“请输入选择编号……”时,从键盘键入“11”,程序执行的是选择项**的功能,而不是选择项***的功能。仔细检查程序似乎没有问题,为什么键入“11”后却执行“1”编号对应的选择项**的功能呢?原来问题出在set exact命令上。
set exact命令是与字符串比较运算有关的。它的格式是:set exact on/off。
系统初始引导后处于“off”状态。在使用了命令“set exact on”后,字符串的比较就是严格的了,等号左端的字符串必须和右端的字符串对应字符完全相同,这两个字符串才被认为是相等的。如:
. ? ' A B C D E F
' = ' A B C '
. T .
. ? ' 1 1
' = ' 1 '
. T .
. set exact on
. ? ' A B C E E F ' ='ABC'
. F .
. ? ' 1 1 ' = ' 1 '
. F .
了解了set exact命令的作用后,不难解决文章开头出现的问题。系统初始引导后处于“off”状态,若想执行选择项***的功能,当你从键盘键入“11”后,程序执行中先将你键入的“11”与“1”比较,“11”相当于等号左端的字符串,“1”相当于等号右端的字符串。
当然,若菜单中的选择项数目少于10时,选用编号0、1、2、……或9,就不会出现这个问题;若选择数目多于10时,若用编号11、12、……等,则会出现这类问题。有些同志在出现这类问题后,检查程序,又觉得没问题,在没办法情况下,选用编号0、1、……9、A、B、C、……Z来作为选择编号。但若选择项再多,必须出现11、12,……19及21、22、……29、……时,这个问题就无法避免,必须在程序中加入,set exaet on命令来解决这个问题。