VBS For Next循环的陷阱分享

昨天写《QWERTY密码:加密与解密》的时候,为了得到26个字母的字符串,写了这样一个 For Next 循环:


代码如下:

'Author: Demon
'Website: http://demon.tw
'Date: 2012/2/10
For i = 65 To (i + 25)
s = s & Chr(i)
Next
WScript.Echo s

运行后却发现没有字符串输出,觉得很奇怪,于是简单修改了一下:


代码如下:

'Author: Demon
'Website: http://demon.tw
'Date: 2012/2/10
For i = 65 To (i + 25)
WScript.Echo Chr(i)
s = s & Chr(i)
Next
WScript.Echo s

仍然没有任何输出,说明 For Next 循环中的语句根本就没有执行,百思不得其解,于是请教了一下预言家晚报,他很快就发现了陷阱所在:


代码如下:

'Author: Demon
'Website: http://demon.tw
'Date: 2012/2/10
For i = 65 To (i + 25) Step -1
WScript.Echo Chr(i)
s = s & Chr(i)
Next
WScript.Echo s

这次种终于有输出了,相信聪明的你也一定发现了陷阱在哪里。For Next 循环的求值顺序并不是按照从左到右的,表达式 (i + 25) 在 i = 65 之前就已经求值了,而此时 i 的值是默认的0,所以原循环相当于:


代码如下:

'Author: Demon
'Website: http://demon.tw
'Date: 2012/2/10
For i = 65 To 25
s = s & Chr(i)
Next
WScript.Echo s

当然不会有输出,最后我把程序改成了这样:


代码如下:

'Author: Demon
'Website: http://demon.tw
'Date: 2012/2/10
For i = Asc("A") To Asc("Z")
s = s & Chr(i)
Next
WScript.Echo s

既直截了当,又不会碰到 For Next 陷阱。

(0)

相关推荐

  • VBS For Next循环的一些细节

    For Next 语句的基本结构为: 复制代码 代码如下: For counter = start To end [Step step] [statements] [Exit For] [statements] Next 当 For Next 循环开始时,Visual Basic Scripting Edition (VBScript) 将 start 赋值给 counter.在运行循环中的语句块之前,将 counter 与 end 进行比较.如果 counter 已经超过了 end 的值,那么

  • VBS For Next循环的陷阱分享

    昨天写<QWERTY密码:加密与解密>的时候,为了得到26个字母的字符串,写了这样一个 For Next 循环: 复制代码 代码如下: 'Author: Demon 'Website: http://demon.tw 'Date: 2012/2/10 For i = 65 To (i + 25) s = s & Chr(i) Next WScript.Echo s 运行后却发现没有字符串输出,觉得很奇怪,于是简单修改了一下: 复制代码 代码如下: 'Author: Demon 'Web

  • Java编程几个循环实例代码分享

    有关Java循环的内容,编程中还是比较常用的,下面分享给大家几个循环的示例代码,练习一下. 1.循环输出1到100之间所有能被3或能被4整除的数. package com.hz.loop02; /** * 1.循环输出1到100之间所有能被3或能被4整除的数. * @author ztw * */ public class Practice01 { public static void main(String[] args) { for (int i=1;i<=100;i++){ //判断下是否

  • 用vbs实现文本循环读取

    因为测试中需要读取一批URL数据进行浏览,其实使用QTP本身的table能实现多种读取方式,但是因为需要tabel是使用excel保存的,在没有安装excel的机器或者vsita机器上运行该部分脚本会遇到问题,为了不必要的麻烦,因而使用txt保存网址数据. 但是vbs好像没有提供设置文件读取位置的函数(python提供),网上没有找到这块可用的代码,可能大家基本没有我这么低级的需求吧囧rz--,后来还是搞定了,所以将代码贴出来,以作备忘.其实核心就是发现读取到文本的最后一行,那么重新打开该文件即

  • asp.net中for和do循环语句用法分享

    本示例的FOR循环创建一个Mandelbrot图像. 复制代码 代码如下: using System; namespace a { class Program { public static void Main(string[] args) { double realCoord,imagCoord; double realTemp,imagTemp,realTemp2,arg; int iterations; for (imagCoord=1.2;imagCoord>=-1.2;imagCoor

  • VBS基础篇 - 循环(for、Do、While)

    经常地,当编写代码时,我们希望将一段代码执行若干次,我们可以在代码中使用循环语句来完成这项工作. 循环可分为三类:一类在条件变为 False 之前重复执行语句,一类在条件变为 True 之前重复执行语句,另一类按照指定的次数重复执行语句. For...Next:指定循环次数,使用计数器重复运行语句 Do...Loop:当条件为 true 或者直到条件为 true 时,运行循环 While-Wend:当条件为True时循环 For Each...Next:对于集合中的每项或数组中的每个元素,重复执

  • php循环创建目录示例分享(php创建多级目录)

    复制代码 代码如下: function mk_dir($dir, $mod = 0777){ if(!is_dir($dir) || mkdir($dir, $mod)) { if(!mk_dir(dirname($dir, $mod))) { return false; } } return mkdir($dir, $mod);} 原理:就是不断的尝试创建上层目录,依此类推

  • JavaScript正则表达式exec/g实现多次循环用法示例

    本文实例讲述了JavaScript正则表达式exec/g实现多次循环用法.分享给大家供大家参考,具体如下: var x = "a.xxx.com b.xxx.com c.xxx.com"; 希望得到 ["a","b","c"] 这三个结果 1. 正则需要 添加 g 2. exec 循环,直到返回空 代码如下,会输出 a b c var x = "a.xxx.com b.xxx.com c.xxx.com";

  • jQuery的each循环用法简单示例

    本文实例讲述了jQuery的each循环用法.分享给大家供大家参考,具体如下: <script type="text/javascript"> $(document).ready(function(){ $("#testbutton").click( function(){ //each:遍历数组操作 $.each($("p"), function(i, val){ $("<div>第" + i + &

  • Oracle存储过程循环语法实例分析

    本文实例讲述了Oracle存储过程循环语法.分享给大家供大家参考,具体如下: 1.简单循环 语法 loop statements; end loop; 例子: counter := 0; loop counter := counter + 1; exit when counter = 5; end loop; 备注:exit语句立即结束循环,exit when 语句在指定条件出现时停止循环(可以出现在循环代码中的任意位置) 2.while循环 语法 while condition loop st

随机推荐