而不用像C语言那样麻烦: 或者是VB的正规声明(VB可以声明也可以不用)那样: 复制代码 代码如下: int a1; Dim a1 as integer float a2; Dim a2 as Double char* a3; Dim a3 as string a1=14; a1=14 a2=12.23; a2=12.23 a3="Hello"; a3="Hello"
注意,true和"true"(加双引号)是不一样的, "true"是字符串,true是布尔值, 千万不能混淆. 回到if语句上来, 我们先来看看简化版的if语句:if 判断式 then 语句体 我们来看一个例子: 复制代码 代码如下: dim a,b a=12 b=13 if b>a then msgbox "B大于A"
嘿嘿, 我是“变态者”, 现在我要你处理三种情况, <100,=100,>100, 还要写在一个if结构里, 你怎么办, 我给你答案: 复制代码 代码如下: dim a a=inputbox("请输入一个大于100的数") a=int(a) "inputbox返回的是字符串, 我们把他变成整数 if a>100 then msgbox "正确" else if a=100 then msgbox "老大, 你耍我?" else msgbox "错误" end if end if
这次输入100看看, 是什么? else if语句可以在if结构中多次出现, 以灵活判断不同的情况 (如果你要判断得太多, 就请使用"选择结构", 过会儿就讲), 当所有elseif都处理完了,而没有符合情况的时候再执行else中的语句.另一个例子: 复制代码 代码如下: Dim a,b,c,d a=inputbox("a是:","输入半径") b=Inputbox("b是:","输入半径") d=Inputbox("答案:","输入答案") c=a*2+b*2 "这里没有问题, 会自动转换 if d=c then msgbox "你好聪明" else msgbox "你好猪头 自己的题还不会!" end if
说到if, 我们不得不说一说逻辑运算符, 今天介绍两种, "and" 和 "or" 学会了if语句之后, 我举一个例子, 你一看就明白了. 复制代码 代码如下: dim a,b a=inputbox("输入一个数 >10") b=inputbox("输入另一个数 >10") a=int(a) b=int(b) if a>10 and b>10 then msgbox "正确" else msgbox "错误" end if
这段程序让你输入两个值, 必须都大于10, 只要有一个不大于, 就输出错误 复制代码 代码如下: dim a,b a=inputbox("输入一个数 >10") b=inputbox("输入另一个数 >10") a=int(a) b=int(b) if a>10 or b>10 then msgbox "正确" else msgbox "错误" end if
select case 变量名 case 值 语句 case 值 语句 case else 语句 end select 我们举个例子就能很简单的说明: 复制代码 代码如下: dim a a=inputbox("输入一个1--3的值") a=int(a) "处理inputbox返回字符串的问题 select case a case 1 msgbox "壹" case 2 msgbox "贰" case 3 msgbox "叁" case else msgbox "输入错误" end select
dim a a=inputbox("请输入1--3的值") a=int(a) if a=1 then msgbox "壹" elseif a=2 then msgbox "贰" elseif a=3 then msgbox "叁" else msgbox "输入错误" end if 怎么样, 麻烦吧, 还是select好吧. OK, 今天到此结束, 总结一下:
do msgbox "这个信息会不断重复出现, 要停止程序请使用任务管理器(Ctrl+Alt+Del)中止wscript进程" loop 运行这个程序, 当你点销掉一个对话框马上会出来另一个, 你永远点不完, 总有下一个. 谁会运行这样的程序? 除非是给别人捣乱(我就干过这种事), 所以在do..loop结构中还有一个语句:exit do, 这个语句将终止循环, 跳到loop后面的语句继续执行.举个例子来说: dim a "注意:常量不需要在dim里面声明,否则会引发错误 const pass="123456" "这是一个字符串 请用""包裹起来. 设定密码为常量, 不可变更 do a=inputbox("请输入密码") if a=pass then msgbox "密码校验成功" exit do end if loop
dim a,ctr ctr=0 "设置计数器 const pass="pas123_" "上面的那个是弱密码, 这次改的强一点 do a=inputbox("请输入密码") if a=pass then msgbox "认证成功" exit do else if ctr=3 then msgbox "已经达到认证上限, 认证程序关闭" exit do else ctr=ctr+1 注意:这一句是赋值句,要从右往左读,即每出错一次就把ctr加上1,然后再放回ctr里面,使得这个常量加1
其实, 要在do...loop加上验证的功能, 并不一定要用if, 我们可以直接利用do. 我来介绍一下while关键字, while可以放在do或者是loop后面, 然后再接一个表达式, 当表达式的值为true的时候(表达式成立),才运行循环体.我们来看一下修改后的程序" 复制代码 代码如下: dim a,ctr ctr=0 const pass="pas123_" do while ctr<3 a=inputbox("请输入密码") if a=pass then msgbox "认证成功" msgbox "(你可以在这里加一段成功后得到的信息)" exit do else ctr=ctr+1 "如果密码出错就增加一次错误认证计数 msgbox "认证出错, 请检查密码" end if loop
这样实现的功能和上一个例子完全一样, 我们再来看看把while放在loop后面: 复制代码 代码如下: dim a,ctr ctr=0 const pass="pas123_" do a=inputbox("请输入密码") if a=pass then msgbox "认证成功" msgbox "(你可以在这里加一段成功后得到的信息)" exit do else ctr=ctr+1 "如果密码出错就增加一次错误认证计数 msgbox "认证出错, 请检查密码" end if loop while ctr<3
do的形式: 复制代码 代码如下: dim i i=0 do while i<5 msgbox i i=i+1 "因为do不能自动计数, 必须手动加 loop
怎么样, 还是for比较好用吧. for在编程中很有用途, 我们再举一个例子, 顺便讲一下嵌套循环. 复制代码 代码如下: dim i,j for i=1 to 9 for j=1 to 9 str=str & i * j & " " "&是和并字符串的符号 next "每个next对应一个for next msgbox str
要注意, 这里有一个"大"的for, 和一个小的for, 当小的for执行完一个周期以后, 大的for才执行一次(换句话说, 大的for执行一次, 小的要执行9次), 所以一共执行了九九八十一次. 在大的for里可以不仅仅是一个小的for, 也可以加上另外的语句. 我们来修改一下源程序: 复制代码 代码如下: dim i,j for i=1 to 9 for j=1 to 9 str=str & i * j & " " next "每个next对应一个for str=str & vbCrlf "vbCrlf相当于键盘上的回车键,因为你不能在键盘上输入,所以系统定义了一个默认的常量 next msgbox str
看到了吧, 所以我说我们可以把它看成是"一条线", 等到我们学到了文件操作, 就可以把他们输出到文件中去了. 一维数组有很多用处, 我们来看一下一个复杂的例子. 我们要储存3各学生的名字, 身高, 成绩这三种数据, 由于名字是字符串, 而身高可能是浮点数(带小数点的数), 成绩则可能是整数, 所以我们不能把他们储存在一个数组里面(不要忘记, 数组织只能存储同类的数据), 所以我们要建3个数组, 以下是例程: 复制代码 代码如下: dim name(2), high(2), mark(2) "定义三个数组分别储存3个人的名字, 身高和得分 dim ctr "计数器 for ctr=0 to 2 name(ctr)=inputbox("请输入第" & ctr+1 & "个学生的姓名") high(ctr)=inputbox("请输入第" & ctr+1 & "个学生的身高") mark(ctr)=inputbox("请输入第" & ctr+1 & "个学生的得分") next
OK, 我们已经填充好了数据, 现在我们的小小数据库只能按顺序输入, 我们要让它看起来像点样子, 我们来给他设计查询功能: 复制代码 代码如下: "接着上面的程序 dim cname, temp "要查询的名字, 和一个临时变量, 用来储存数据的位置 cname=inputbox("请输入你要查询的名字:") for ctr=0 to 2 "遍历所有name数组的成员, 寻找要查询的名字 if name(ctr)=cname then temp=ctr "记录数据位置 exit for "退出循环, 和exit do的用法一样 end if "不要忘了end if next msgbox "姓名:" & name(temp) & " " & "身高:" & high(temp) & " " & "得分:" & mark(temp)
嘿嘿, 有意思吧, 其实在这个程序里面, 那个temp变量完全没有必要, 只是为了更清楚地说明问题. 因为当exit for以后ctr变量的值就不会改变, 储存的正好是对应数据在数组中的位置, 写这个temp变量是为了照顾到以后要学C++的朋友(C++可以在for语句里声明新变量, 只在这个for结构中有效, 所以到了外部就不能访问了). 也就是说可以简化成如下: 复制代码 代码如下: dim cname cname=inputbox("请输入你要查询的名字:") for ctr=0 to 2 if name(ctr)=cname then exit for "因为只有exit for就不需要块if了 next msgbox "姓名:" & name(ctr) & " " & "身高:" & high(ctr) & " " & "得分:" & mark(ctr)
这是最直接的路子. 好好重读一下上面所有的源代码, 然后自己写几个程序, 完全搞清楚一维数组及其应用以后再看后面的二位数组. 二维数组好像是一个一维数组的集合, 就好像"线积成面"一样, 由n各一维数组组成二维数组, 这是初学者比较好理解的办法(比较精确的是用"编号"的概念去理解, 因为4维以上的数组就比较难以用欧几里德几何概念去解释了). 二维数组是很好解释的, 我们来看一下: 复制代码 代码如下: dim a(2,2) "从零开始, 一共有3 X 3 = 9 个数据 dim i,j "需要两个计数器 for i=0 to 2 for j=0 to 2 "使用嵌套循环 a(i,j)="X" next next
假如需要储存的都是同一类型的数据, 我们就可以用二维数组, 比如要储存5个人的姓名,国籍,民族, 就可以使用二维数据 复制代码 代码如下: dim info(4,2) "一共五个人, 要储存的数据类型有3项 dim i,j for i=0 to 4 for j=0 to 2 dim opt "定义一个变量用于存储数据项提示 select case j "判断应该输入的是什么数据 case 0 opt="姓名" case 1 opt="国籍" case 2 opt="民族" end select info(i,j)=inputbox("请输入第" & i+1 & "个人的" & opt) next next "输出太麻烦了, 我懒得动, 你知道那么回事就行了
首先我们要了解, 为什么要用函数, 我们用"实例"说话, 先看一个例子: 给出两个数, 输出较大的那一个. 复制代码 代码如下: dim a1,a2,b1,b2,c1,c2 a1=2:a2=4 "":"可以让你把多个语句写在一行上 b1=32:b2=67 c1=12:c2=898 if a1>a2 then msgbox a1 elseif a1<a2 then msgbox a2 end if if b1>b2 then msgbox b1 elseif b1<b2 then msgbox b2 end if if c1>c2 then msgbox c1 elseif c1<c2 then msgbox c2 end if
多么麻烦呀, 我们把相同的比较过程复制了好几遍, 早期语言没有结构化(没有过程和函数)的时候, 程序员们的确是这么干的, 那个年代也没有剪贴板这一说, 大家都是重新输入代码. 后来工作简化了: 复制代码 代码如下: dim a1,a2,b1,b2,c1,c2 a1=2:a2=4 b1=32:b2=67 c1=12:c2=898 msgbox co(a1,a2) msgbox co(b1,b2) msgbox co(c1,c2) function co(t1,t2) "我们使用function定义了一个新的函数 if t1>t2 then co=t1 "通过"函数名=表达式"这种方法返回结果 elseif t2>t1 then co=t2 end if end function
我们在这里是用了一个新的关键字:funciton, 这个关键字表示一个新函数开始, 格式: function 函数名(参数1, 参数2...参数n) "列表可以是空的, 但括号不能省略, 参数之间用","分割 ... exit function "结束函数, 不是必需的 ... end function