第一站 - 轻松上网从此开始!

上网第一站

当前位置: > 教程 > 操作系统 >

VBS基础教程(4)

时间:2013-06-04 17:19来源:未知 作者:小优 点击: 我来投稿获取授权
以下内容来自网络或网友投稿,www.swdyz.com不承担连带责任,如有侵权问题请联系我删除。投稿如果是首发请注明‘第一站首发’。如果你对本站有什么好的要求或建议。那么都非常感谢你能-联系我|版权认领
第四篇(共六篇) 大家好,今天写第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
 
  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
 
 
  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 j=1 to 9
 
  str=str & i * j & " " '&是和并字符串的符号
 
  next '每个next对应一个for
 
  next
 
  msgbox str
 
 
  (这样出现的结果是一次性的,如果你需要依次出现把msgbox str)提前到next之前
 
  看看运行结果, 是否令你会想起小学时代的数学老师(丑陋的嘴脸).
 
 
  要注意, 这里有一个"大"的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
 
  这次运行完成以后, 输出结果按照乘数进行了分割, 每小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钱3只)求得是能有多少种办法买这些鸡. 如果看不懂的话我用大白话说说:有人要去买鸡, 用100块钱正好买了100只鸡, 价格如下:公:5$, 母:3$, 小:1$ for 3, 让你求一共多少种卖法(公母小怎么搭配). 请用循环解决这个问题.
(责任编辑:小优)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
分享按鈕