热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

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

VBS基础编程教程(第4篇)
四篇(共六篇): 
大家好, 昨天我休息了一天, 所以今天写第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:今天要去移民局办事, 所以文章写的很仓促. 大部分代码都没有实验, 请大家帮我找错. 另外, 上次的作业大家在论坛应该 

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

推荐阅读
  • Win10 64位旗舰版的优势及特点详解
    本文详细介绍了Win10 64位旗舰版的优势及特点,包括更安全的源安装盘、永久激活方式、稳定性和硬件驱动的集成,以及人性化的维护工具和分区功能。通过阅读本文,您将了解到Win10 64位旗舰版相比其他版本的优势和特点。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 现在学vb6还靠得住么?语言只是工具,关键是思想。程序=算法+数据结构。除了汇编,其他语言都靠不住。随着时代的进步,很多语言跟不上开发的要求。从面向过程到面向对象,与其说是思想的进步,不如说是为了适应高速开发。除了底层汇编语言,还有那些能适应高速开发的语言。每种语言都是很有趣的。 ... [详细]
  • 本文详细介绍了如何创建和使用VUE uni-app开发环境,包括通过HBuilderX可视化界面和通过vue-cli命令执行的方法。文章内容简单清晰,易于学习与理解。通过学习本文,读者可以深入了解VUE uni-app开发环境,并通过实践验证掌握具体的使用情况。编程笔记将为读者推送更多相关知识点的文章,欢迎关注! ... [详细]
  • 本文介绍了一个从入门到高手的VB.NET源代码,通过学习这些源代码,可以在21天内成为VB.NET高手。文章提供了下载地址,并提醒读者加入作者的QQ群和收藏作者的博客。 ... [详细]
  • Linux环境变量$PATH的作用及使用方法
    本文介绍了Linux环境变量$PATH的作用及使用方法。$PATH是一个由多个目录组成的变量,用冒号分隔。当执行一个指令时,系统会按照$PATH定义的目录顺序搜索同名的可执行文件,如果有多个同名指令,则先找到的会被执行。通过设置$PATH变量,可以在任何地方执行指令,无需输入绝对路径。 ... [详细]
  • GTX1070Ti显卡怎么样?GTX1070Ti显卡首发图赏+参数解读与拆解图
    先来简单回顾一下今年的显卡市场,nvidia自从发布了帕斯卡架构新品之后,可以说是一直都主宰着高端游戏显卡市场,虽说amd也憋了一个hbm2的vega64出来,然而即使是最高贵的水 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 本文介绍了某点评网的搜索策略,包括名称和地址的匹配策略,模糊匹配的方法以及不同口音和拼音的近似发音。同时提供了一些例子来说明这些策略的应用。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • asp中如何嵌入python的简单介绍
    本文目录一览:1、如何在IIS中执行Python脚本 ... [详细]
  • CS231n简介详见CS231n课程笔记1:Introduction。本文都是作者自己的思考,正确性未经过验证,欢迎指教。作业笔记本部分实现的是Momentum,RMSProb, ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
author-avatar
青樽有酒_585_587
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有