SET EXACT命令的使用 谢康 1993-01-08 这个最简单的菜单有两个选择项“1.**”和“11.***”。完成这个菜单功能的最简单的程序为: 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命令来解决这个问题。