VBS编程教程 (第4篇)_vbs

四篇(共六篇): 
大家好, 昨天我休息了一天, 所以今天写第4章:循环结构 

  我们先来看一道题:商场进行每日结算, 要求累加出今天的营业额, 每次输入一个数, 这道题其实很简单, 但就我们现在学 

过的知识要完成这道题相当麻烦, 我们来分析一下. 首先, 我们需要知道买卖的次数, 这样才能控制输入的次数,但是, 这种设 

计是非常低效的, 每天都要重新设计程序. 假定今天进行了5次交易, 以下是源程序: 

dim sum 
sum=0 '初始化变量 
sum=sum + int(inputbox("请输入交易额")) 
'sum=sum+x 这种形式是把本身的值取出来, 进行一次运算, 再放回本身, 这种方法很有用处 
'这里使用了函数嵌套, 把inputbox的返回值直接传给int函数, 转化成整数, 下同 
sum=sum + int(inputbox("请输入交易额")) 
sum=sum + int(inputbox("请输入交易额")) 
sum=sum + int(inputbox("请输入交易额")) 
sum=sum + int(inputbox("请输入交易额")) 
msgbox(sum) 

  看到了吗, 我通过把计算过程复制了5遍才设计好了程序, 这种程序在汽车交易所等交易次数少的地方还能凑合着用, 如果 

放到超市岂不是要复制, 粘贴几千遍? 我们今天讲的内容就可以克服这种缺陷, 首先, 我们来讲以下Do...Loop语句. 

  do...loop的结构看上去非常简单, 就是:do...loop, 仅此而已, 这个结构不断执行do和loop之间的语句(学名叫:循环体), 
永不停止. 举个例子来说: 

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 

  这个程序会一直不停的问你密码, 知道你输入了正确的密码为止.(if可以嵌套在另一个if当中, 也可以嵌套在循环体当中 

, 所以一定要用缩进, 来分清楚程序的各个部分). 这个程序是很经典的, 早期的程序都是这么做的. 但是我们是Hacker, 所以 

我们了解系统的安全性, 这种无限次认证程序很容易被穷举破解, 我们要来限定认证的次数. 修改程序如下 

dim a,ctr 
ctr=0 '设置计数器 
const pass="pas123_" '上面的那个是弱密码, 这次改的强一点 
do 
    if ctr=3 then 
        msgbox("已经达到认证上限, 认证程序关闭") 
        exit do 
    else 
        a=inputbox("请输入密码") 
        if a=pass then 
            msgbox("认证成功") 
            msgbox("(你可以在这里加一段成功后得到的信息)") 
            exit do 
        else 
            ctr=ctr+1 '如果密码出错就增加一次错误认证计数 
            msgbox("认证出错, 请检查密码") 
        end if 
     end if 
loop 

  运行这个程序试试看, 当你出了3此错误以后, 就会停止再次询问密码, 关闭程序. telnet认证用来限制次数的程序与此大 

同小异. 要注意的是嵌套的if语句, 清仔细读一下这个程序, 可能比较难懂, 也请你试着自己设计一下类似的程序. 

  其实, 要在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 

  功能是一样的, 为什么要放在loop后面呢? 你把ctr的值改成3就知道了, while在do后面的程序会直接退出, 而在loop后面 

还会允许一次认证, 到了loop才结束.和while相反的是until, 用法和while一样, 不过他只有当后面的表达式的值为false(表 

达式不成立)的时候才执行循环体, 请自己试验一下 

  ok, 我们来看另外一种循环结构,for....next, 这种循环结构是基于计数的, 也是在编程中最常见到的循环结构. 

dim i 
for i=0 to 5 
    msgbox(i) 
next 

  看到了吗?每次输出的i都是递增的, 但我们没有明确指出i要递增, 当i达到5的时候, 循环就结束了, 因为由0开始, 所以 

循环体执行了6次, 这一点很重要, 大部分东西都是从0开始而不是1. 这个程序也可以写成 

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 i=1 to 9 
       str=str & i * j & " " '&是和并字符串的符号 
    next '每个next对应一个for 
next 

  看看运行结果, 是否令你会想起小学时代的数学老师(丑陋的嘴脸). 要注意, 这里有一个"大"的for, 和一个小的for, 当 

小的for执行完一个周期以后, 大的for才执行一次(换句话说, 大的for执行一次, 小的要执行9次), 所以一共执行了九九八十 

一次. 在大的for里可以不仅仅是一个小的for, 也可以加上另外的语句. 我们来修改一下源程序: 

dim i,j 
for i=1 to 9 
    for i=1 to 9 
       str=str & i * j & " " 
    next '每个next对应一个for 
    str=str & vbCrlf 'vbCrlf相当于键盘上的回车键,因为你不能在键盘上输入,所以系统定义了一个默认的常量 
next 

  这次运行完成以后, 输出结果按照乘数进行了分割, 每小for运行完一次, 就换一行(通过vbcrlf). 

  这次的内容对菜鸟可能比较难懂, 掌握的办法只有一个:多实践. 另外, 我在论坛看到很多人还是问:"VBScript要用什么工 

具编?"我就很气愤, 我在第一篇里面已经说明:用记事本编辑源代码, 然后保存为以.vbs为扩展名的程序就可以了, 请大家不要 

再问. 另外, 国产的一种垃圾软件"超级X霸"抢占了vbs这个扩展名, 请把那个垃圾卸载掉. 

  我们总结一下: 

要点: 

1) do..loop和exit do的用法 

2) while当表达式true的时候执行循环体,until反之 

3) for...next是计数循环, 每次执行计数器递加 

4) 嵌套循环的作用和写法 

4.5) &用于连接字符串 

5) vbCrLf相当于键盘上的回车键 

作业: 

1) 在我国的数学经典著作"九章算术"中有这样一道题:百钱买百鸡, 公鸡5钱一只, 母鸡3钱一只, 小鸡1钱2只(这个数据我是参 

考一本编程书的, 但我记得是公3,母1,小1钱3只? 不管了, 就按照书上得来吧)求得是能有多少种办法买这些鸡. 如果看不懂的 

话我用大白话说说:有人要去买鸡, 用100块钱正好买了100只鸡, 价格如下:公:5$, 母:3$, 小:1$ for 2, 让你求一共多少种卖 

法(公母小怎么搭配). 请用循环解决这个问题. 

ps:今天要去移民局办事, 所以文章写的很仓促. 大部分代码都没有实验, 请大家帮我找错. 另外, 上次的作业大家在论坛应该 

看到了, 我就不重复答案了, 不知道大家喜欢做这种题, 还是以前那种比较简单的? 

时间: 2024-10-02 00:56:32

VBS编程教程 (第4篇)_vbs的相关文章

VBS编程教程 (第2篇)_vbs

第二篇:         我真没想到, 第一次的作业竟然有人不会.  看来要讲的非常非常细致才行, 嗯, 今天讲各种"量"和基本运算  先说常量, 这个比较简单.  什么是常量呢, 常量就是其值不可变化的量.  常量分为两种:第一种, 自然常量. 这叫是因为它们本身就是常量, 你怎么更改21的值呢? 他永远都是21, 不可能变成46      如果你在程序中使用"21=46", 这样的语句将会引发一个错误. 同样的, 字符串也是常量 (还记得字符串吗? 就是包裹在&

VBS编程教程 (第6篇)_vbs

最后一篇:  新家不错, MM开心, 我也就跟着高兴了 : ), 今天我们学习基础篇的最后一个部分:自定义函数和过程. 我们每天都在和函  数打交道, inputbox()是函数, msgbox()是函数, int()也是函数...这些函数都是系统内建的, 我们只能用不能改. 今天, 我  就教大家怎样自己制作一个函数.  首先我们要了解, 为什么要用函数, 我们用"实例"说话, 先看一个例子: 给出两个数, 输出较大的那一个.  dim a1,a2,b1,b2,c1,c2  a1=2

VBS编程教程 (第3篇)_vbs

第三篇(共六篇): 首先, 我来解决一下上次课程的几个疑问  第一, 那个余数问题, 16 / 5 = 3...1, 是因为我改过前面的部分, 后面的忘了改了, 不好意思.  第二, 请看一下程序清单:  1)  Dim a,b,c  a=inputbox("a是:","输入半径")  b=Inputbox("b是:","输入半径")  c=a*2+b*2  Msgbox(c)  这个 输入1.2时是6  2)  Dim a,

VBS编程教程 (第5篇)_vbs

第五篇(共六篇):         请允许我县描述一下我现在的环境:气温高达37摄氏度, 而我忘记了图书馆开门的时间, 还要在这里站上一个小时, 在热带植物的包裹下, 各种奇怪的小飞虫围着我转来转去. 不过令我欣慰的是, 终于写到五了, 还有两课我们的"基础篇"就要结束了.         今天我们来了解语言本身的最后一个论题:数组.  要理解"数组", 这个概念我觉得另一种翻译对学习来说更加容易:"阵列", 没错, 数组就是一个阵列, 一个数据

VBS基础编程教程 (第1篇)_vbs

, 如果你想接触以下VBScript也可以, 但既然有编程基础推荐直接去找一些参考书来读, 会比较快.  什么是VBScript呢? VBScript的全称是:Microsoft Visual Basic Script Editon.(微软公司可视化BASIC脚本版). 正如其字面所透露的信息, VBS(VBScript的进一步简写)是基于Visual Basic的脚本语言.  我进一步解释一下, Microsoft Visual Basic是微软公司出品的一套可视化编程工具, 语法基于Basi

VBS基础编程教程 (第6篇)_vbs

最后一篇:  新家不错, MM开心, 我也就跟着高兴了 : ), 今天我们学习基础篇的最后一个部分:自定义函数和过程. 我们每天都在和函  数打交道, inputbox()是函数, msgbox()是函数, int()也是函数...这些函数都是系统内建的, 我们只能用不能改. 今天, 我  就教大家怎样自己制作一个函数.  首先我们要了解, 为什么要用函数, 我们用"实例"说话, 先看一个例子: 给出两个数, 输出较大的那一个.  dim a1,a2,b1,b2,c1,c2  a1=2

VBS基础编程教程 (第4篇)_vbs

四篇(共六篇):  大家好, 昨天我休息了一天, 所以今天写第4章:循环结构  我们先来看一道题:商场进行每日结算, 要求累加出今天的营业额, 每次输入一个数, 这道题其实很简单, 但就我们现在学  过的知识要完成这道题相当麻烦, 我们来分析一下. 首先, 我们需要知道买卖的次数, 这样才能控制输入的次数,但是, 这种设  计是非常低效的, 每天都要重新设计程序. 假定今天进行了5次交易, 以下是源程序:  dim sum  sum=0 '初始化变量  sum=sum + int(inputbo

VBS基础编程教程 (第3篇)_vbs

第三篇(共六篇):  首先, 我来解决一下上次课程的几个疑问  第一, 那个余数问题, 16 / 5 = 3...1, 是因为我改过前面的部分, 后面的忘了改了, 不好意思.  第二, 请看一下程序清单:  1)  Dim a,b,c  a=inputbox("a是:","输入半径")  b=Inputbox("b是:","输入半径")  c=a*2+b*2  Msgbox(c)  这个 输入1.2时是6  2)  Dim a

VBS基础编程教程 (第5篇)_vbs

第五篇(共六篇):         请允许我县描述一下我现在的环境:气温高达37摄氏度, 而我忘记了图书馆开门的时间, 还要在这里站上一个小时, 在热带植物的包裹下, 各种奇怪的小飞虫围着我转来转去. 不过令我欣慰的是, 终于写到五了, 还有两课我们的"基础篇"就要结束了.         今天我们来了解语言本身的最后一个论题:数组.  要理解"数组", 这个概念我觉得另一种翻译对学习来说更加容易:"阵列", 没错, 数组就是一个阵列, 一个数据